我对自动释放功能有一些疑问。
请建议..
Q1)对自动释放对象调用retain或release有任何意义或价值吗?
ex1)
UIView *viewTest = [[[UIView alloc] initWithFrame:CGRectMake(0, 0, 300, 400)] autorelease];
[self.view addSubview:viewTest];
在这种情况下,viewtest对象将来会被释放吗? 或者需要添加一行'[viewTest release];'?
EX2)
UIView *viewTest = [[[UIView alloc] initWithFrame:CGRectMake(0, 0, 300, 400)] autorelease];
[viewTest release];
在这种情况下,viewTest将自动释放?
Q2)自动释放的对象在哪里销毁?
答案 0 :(得分:0)
Q1)对自动释放对象调用retain或release有任何意义或价值吗?
实际上,无论如何,当autoreleasepool耗尽时,对象将被释放。看看this
Q2)自动释放的对象在哪里销毁?
自动释放的对象在NSAutoreleasePool
被耗尽时被破坏,或者在@autoreleasepool
构造的末尾被破坏,这基本上做同样的事情。
答案 1 :(得分:0)
autorelease
被认为适合某些情况,例如从方法返回一个对象,因此调用者在使用后不需要释放它。
您的ex2应该会导致问题,因为它会释放两次。
当池耗尽时,自动释放的对象会被解除。