【发布时间】:2011-01-16 02:34:21
【问题描述】:
你知道如果我保留一个自动释放的对象会发生什么吗? 它会被释放还是保留获胜?
【问题讨论】:
-
最简单的找出方法就是尝试一下。修改您的代码,构建并运行。告诉我们你的发现。 %)
标签: iphone objective-c retain autorelease nsautoreleasepool
你知道如果我保留一个自动释放的对象会发生什么吗? 它会被释放还是保留获胜?
【问题讨论】:
标签: iphone objective-c retain autorelease nsautoreleasepool
你知道如果我保留会发生什么 一个自动释放的对象?那将会 释放还是保留获胜?
retain“获胜”,但这样想就充满了失败。
保留和释放只是增加或减少对象保留计数的机制。自动释放只是延迟释放;不多不少。
如果您保留一个自动释放的对象,您现在正在增加保留计数,而保留计数将在以后减少。这事儿常常发生; [NSString stringWithFormat: @"...."] 返回一个自动释放的字符串,如果您希望它在[最常见的情况下]当前通过事件循环后继续存在,则 retain 会返回该字符串。
【讨论】:
如果你想保留你的变量,你需要保留它。例如:
myButton = [[UIButton buttonWithType:...] retain];
buttonWithType: 方法返回一个已用 autorelease 实例化的 UIButton。它会在需要时自行释放(可以这么说)。
【讨论】:
保留将胜出。这是很常见的,是一种例外的做法。
通常方便的方法返回自动释放的对象,如
[NSString stringWithFormat:@""];
希望您保留所需的任何对象,只要您记得稍后释放它们。
请记住,自动释放将发生在当前系统消息的末尾。
来自下面的文章: “系统会为每条系统处理的消息创建一个自动释放池,并且在对该消息的处理完成后,池中的对象都会自动释放。”
可以在这里找到一些很好的解释:
http://www.iphonedevsdk.com/forum/iphone-sdk-tutorials/7295-getters-setters-properties-newbie.html
【讨论】: