我試圖瞭解何時調用autorelease,以及這實際上會對我的對象做些什麼。Objective-C自動釋放內存管理
在Mac Developer Library中閱讀About Memory Management之後,我明白當你有一個充當工廠方法的方法時 - 通過創建一個新對象並返回它 - 該方法在返回它之前無法釋放該對象,因爲這會導致返回釋放的對象。
例
- (Test *) createNewTest
{
Test *newInstance = [[Test alloc] init];
[newInstance release];
return newInstance; // deallocted object returned.
}
相反,我應該使用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?
}
我怎麼能放心地使用返回自動釋放對象我runIt
方法中,如果當自動釋放發生了,我不知道嗎?我應該保留createNewTest
返回的對象嗎?或者我可以在runIt
範圍內安全地使用它嗎?
順便說一句 - 由OBJ-C的命名規則,你createNewTest方法應該,因爲它包含「新」在它的名字返回非自動釋放對象。 – Vladimir 2011-03-04 10:13:56
對象使用alloc實例化,所以它必須被釋放。 – Sailesh 2011-03-04 10:24:24