你知道如果我保留一个自动释放的对象会发生什么吗? 它会被释放还是保留会赢?
答案 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