【发布时间】:2011-03-04 10:06:32
【问题描述】:
我试图了解何时调用自动释放,以及这将对我的对象产生什么实际影响。
在阅读了 Mac 开发人员库中的About Memory Management 之后,我了解到,当您有一个充当工厂方法的方法时——通过创建一个新对象并返回它——该方法无法在返回之前释放该对象,因为这会导致一个被释放的对象被返回。
示例
- (Test *) createNewTest
{
Test *newInstance = [[Test alloc] init];
[newInstance release];
return newInstance; // deallocted object returned.
}
我应该使用autorelease:
由 NSObject 定义的 autorelease 方法,将接收者标记为稍后发布
我的问题是:如果对象要稍后释放,我怎么知道它什么时候释放?
- (Test *) createNewTest
{
Test *newInstance = [[test alloc] init];
[newInstance autorelease];
return newInstance;
}
- (void) runIt
{
Test *myInstance = [self createNewTest];
// when is myInstance released?? and thereby not valid to my function anymore?
}
如果我不知道自动释放何时发生,如何在我的 runIt 方法中安全地使用返回的自动释放对象?我应该保留createNewTest 返回的对象吗?或者我可以在runIt 范围内安全地使用它吗?
【问题讨论】:
-
btw - 根据 obj-c 命名准则,您的 createNewTest 方法应返回非自动释放对象,因为它的名称中包含“新”。
-
对象是用alloc实例化的,所以它必须被释放。
标签: ios iphone objective-c cocoa-touch