我的對象完成了他們的工作。他擁有對工作流程的控制,但現在必須在創建它的對象中調用一個函數,並且必須被釋放。問題是這樣的:如何自我毀滅objective-c中的對象?
AnObject *object;
- (void)function
{
object = [[AnObject alloc] init];
[object doYourJob];
//The program continue to run next line, it don't stop here. So, I can't send a [object release] here
}
- (void)callThisWhenFinish
{
//do something
//can't call [object release] because it is in the stack and run a line of a released object
}
所以,我怎麼能釋放對象的內存,我試試這個:
- 在
callThisWhenFinish
或function
發送[object release]
。 - 失敗!該程序仍然需要運行AnObject
的一些行。 - 用委託的方式來運行
callThisWhenFinish
。 - 失敗!我無法發佈AnObject
,因爲它在功能callThisWhenfinish
完成時嘗試運行下一行。 - 使用NSNotificationCenter將通知張貼到
callThisWhenFinish
。失敗!當我發佈通知時,立即撥打callThisWhenFinish
和AnObject
可以運行下一行,並釋放,導致崩潰。 - 使用具有延遲的相同NSNotificationCenter。這種方式有多安全?我怎麼知道
AnObject
不會再被調用? - 使用[object autorelease]。這項工作,但我不知道什麼時候完成。我的
AnObject
使用大量RAM,並且必須儘可能快地釋放。
任何其他的想法?
使一個實例變量。 – Eimantas
那是'AnObject *對象;'實際上應該是一個全局? – Chuck