调用保留或释放到自动释放的对象有任何意义或价值吗?

时间:2012-08-08 12:18:14

标签: objective-c

我对自动释放功能有一些疑问。

请建议..

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)自动释放的对象在哪里销毁?

2 个答案:

答案 0 :(得分:0)

  

Q1)对自动释放对象调用retain或release有任何意义或价值吗?

实际上,无论如何,当autoreleasepool耗尽时,对象将被释放。看看this

  

Q2)自动释放的对象在哪里销毁?

自动释放的对象在NSAutoreleasePool被耗尽时被破坏,或者在@autoreleasepool构造的末尾被破坏,这基本上做同样的事情。

答案 1 :(得分:0)

autorelease被认为适合某些情况,例如从方法返回一个对象,因此调用者在使用后不需要释放它。

您的ex2应该会导致问题,因为它会释放两次。

当池耗尽时,自动释放的对象会被解除。