Mad*_*sen 13 iphone cocoa-touch objective-c ios
我试图了解何时调用自动释放,以及这实际上会对我的对象做什么.
在Mac Developer Library中阅读关于内存管理后,我了解到当你有一个充当工厂方法的方法时 - 通过创建一个新对象并返回它 - 该方法无法在返回之前释放该对象,因为这样做导致返回一个deallocted对象.
例
- (Test *) createNewTest
{
Test *newInstance = [[Test alloc] init];
[newInstance release];
return newInstance; // deallocted object returned.
}
Run Code Online (Sandbox Code Playgroud)
相反,我应该使用autorelease:
由NSObject定义的自动释放方法标记接收器以便稍后释放
我的问题是:如果要在稍后发布该对象,我怎么知道它何时被释放?
- (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?
}
Run Code Online (Sandbox Code Playgroud)
runIt如果我不知道何时发生自动释放,我怎样才能安全地在我的方法中使用返回的自动释放对象?我应该保留由createNewTest?返回的对象吗?或者我可以在runIt范围内安全地使用它吗?
Jas*_*ien 12
将自动释放的对象添加到自动释放池中.
自动释放池中的对象在主runloop的迭代结束时释放(或者如果您管理自己的自动释放池和/或如果您调用drain,则会更快).
当您调用返回自动释放对象的方法时,它几乎保证有效,直到至少调用它的范围结束.
如果你想确保它保持更长时间,那么你应该保留它,记住当你完成它时再次释放它.
| 归档时间: |
|
| 查看次数: |
17531 次 |
| 最近记录: |