autorelease什么时候真的会在Cocoa Touch中导致发布?
我知道你需要小心iOS上的autorelease
。 我有一个返回一个对象时,它的方法alloc
是由主叫方需要S,所以在这种情况下-我的理解是-我需要发送autorelease
的对象在被调用它返回之前。
这很好,但一旦控制权返回到手机(即我的按钮点击处理后)似乎释放了自动释放池。 我怀疑这应该是怎么回事,但我想知道这种情况的最佳做法是什么。
我采取了从调用者发送retain
消息,以便该对象不被释放,然后在dealloc
明确释放它。
这是最好的方法吗?
自动释放池通常在运行循环的每次迭代后释放。 粗略地说,每个Cocoa和Cocoa Touch应用程序都是这样构成的:
Get the next message out of the queue
Create an autorelease pool
Dispatch the message (this is where your application does its work)
Drain the autorelease pool
你描述的是预期的行为。 如果你想保持一个对象的时间不止于此,你需要明确地保留它。
使用autorelease
是一种说法,“对象,我不再需要你了,但我会把你转给别人,他们可能需要你,所以不要消失。” 因此,对象将保持足够长的时间,以便您从方法返回它或将其提供给另一个对象。 当某些代码想要保留该对象时,它必须通过retain
它来声明所有权。
有关正确使用autorelease
需要知道的所有内容,请参阅内存管理指南。
这是Apple Memory Management文档中提供的一个例子:
– (id)findMatchingObject:(id)anObject
{
id match = nil;
while (match == nil) {
NSAutoreleasePool *subPool = [[NSAutoreleasePool alloc] init];
/* Do a search that creates a lot of temporary objects. */
match = [self expensiveSearchForObject:anObject];
if (match != nil) {
[match retain]; /* Keep match around. */
}
[subPool release];
}
return [match autorelease]; /* Let match go and return it. */
}
链接地址: http://www.djcxy.com/p/53265.html
上一篇: When does autorelease actually cause a release in Cocoa Touch?