我试图了解何时调用自动释放,以及这实际上会对我的对象做什么。
看完About Memory Management在 Mac Developer Library 中,我了解到当您有一个充当工厂方法的方法时 - 通过创建一个新对象并返回它 - 该方法无法在返回之前释放该对象,因为这会导致释放对象被退回。
示例
- (Test *) createNewTest
{
Test *newInstance = [[Test alloc] init];
[newInstance release];
return newInstance; // deallocted object returned.
}
我应该使用 autorelease
:
The autorelease method, defined by NSObject, marks the receiver for later release
我的问题是:如果对象要稍后释放,我怎么知道它什么时候被释放?
- (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
范围内安全地使用它吗?
最佳答案
自动释放对象被添加到自动释放池。
自动释放池中的对象在主运行循环的迭代结束时释放(或者如果您管理自己的自动释放池和/或如果您调用 drain 则更快)。
当您调用一个返回自动释放对象的方法时,它几乎可以保证至少在调用它的范围结束之前保持有效。
如果你想确保它存活得更久,那么你应该保留它,记得在你用完它时再次释放它。
关于ios - Objective-C 自动释放内存管理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5192308/