-2

Possible Duplicate:
What is the difference between releasing and autoreleasing?

Hi can you please elaborate what is the difference between release and auto release and is there any way to create a user defined autorelease pool?and the real use of auto release pool.

4

2 回答 2

4

Release 会立即减少对象的引用计数,这意味着如果它的保留计数达到零,它将立即被释放。Autorelease 是一个延迟发布——它对于所有权移交很有用。

考虑一个类似的方法+[NSString stringWithFormat:]。它创建一个新NSString实例(带有alloc& 的某种形式init),然后将其交给调用者。该类方法不想在那之后仍然“拥有”创建的字符串,但是如果它在返回之前释放新字符串,则新字符串将在调用者获取它之前被释放。相反,它会自动释放新字符串:这意味着该字符串将保留足够长的时间,以便调用者抓住它并在需要时保留它。

如果调用者不保留它会发生什么?这就是自动释放池发挥作用的地方。NSAutoreleasPool跟踪 each ,当autorelease被告知要耗尽时,它会释放其池中的所有对象(如果它们的引用计数变为零,则会导致它们被释放)。默认情况下,在 Mac 或 iOS 应用程序中,主事件循环中有一个自动释放池——因此,如果您调用stringWithFormat:并且不保留结果,它将在下一次传递时消失。

您可以使用创建自己的自动释放池NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]并使用[pool drain]. 如果您有一段代码要创建大量临时对象,这将很有用。

于 2012-04-21T06:18:34.810 回答
0

release立即释放对象,而autorelease在将来的某个时间释放。

示例:你想autorelease在这里返回一个 d 对象,因为如果你这样release做了,在调用此方法的代码可以使用返回的对象之前,它已经得到了 dealloc!

- (NSObject *)someMethod
{
    return [[[NSObject alloc] init] autorelease];
}
于 2012-04-21T06:03:00.423 回答