iPhone - 如果在自动释放后保留会怎么样?

时间:2011-01-16 02:34:21

标签: iphone objective-c retain autorelease nsautoreleasepool

你知道如果我保留一个自动释放的对象会发生什么吗? 它会被释放还是保留会赢?

3 个答案:

答案 0 :(得分:7)

  

如果我保留,你知道会发生什么吗?   一个自动释放的对象?那将会   释放或保留获胜?

retain“获胜”,但想到这一点却充满了失​​败。

保留和释放只是增加或减少对象保留计数的机制。自动释放只是一种延迟释放;不多也不少。

如果你保留一个自动释放的对象,你现在增加保留计数,而保留计数将减少。这事儿常常发生; [NSString stringWithFormat: @"...."]会返回一个自动释放的字符串retain,如果您希望它超出[最典型]当前通过事件循环的时间。

答案 1 :(得分:2)

如果您想保留变量,需要来保留它。例如:

myButton = [[UIButton buttonWithType:...] retain];

buttonWithType:方法返回已使用UIButton实例化的autorelease。它会在需要时照顾自己(可以这么说)。

答案 2 :(得分:2)

保留将胜出。这很常见,是一种例外做法。

通常,便捷方法会返回自动释放的对象,例如

[NSString stringWithFormat:@""];

只要您记得稍后再发布它们,您就可以保留所需的任何对象。

请记住,自动释放将在当前系统消息的末尾发生。

来自以下文章: “为系统处理的每条消息创建一个自动释放池,并且在对该消息的处理完成后,池中的对象全部自动释放。”

可以在这里找到一些很好的解释:

http://www.iphonedevsdk.com/forum/iphone-sdk-tutorials/7295-getters-setters-properties-newbie.html