什麼時候我必須釋放在.h文件中聲明並在我的.m文件中分配的對象viewdidload?自動釋放給我一個錯誤。我是否必須在iOS:何時釋放成員對象?
中發佈它們-(void)dealloc{
}
方法(如屬性)?
THX
什麼時候我必須釋放在.h文件中聲明並在我的.m文件中分配的對象viewdidload?自動釋放給我一個錯誤。我是否必須在iOS:何時釋放成員對象?
中發佈它們-(void)dealloc{
}
方法(如屬性)?
THX
首先,添加[超級的dealloc],這一點很重要:
-(void)dealloc{
[var1 release], var1 = nil;
[var2 release], var2 = nil;
[super dealloc];
}
其次,是的,你已經保留的實例變量必須由您手動釋放。
是[super dealloc] |總是dealloc方法中的最後一個語句?永遠不要將它看作第一個.. – user944351 2012-03-15 12:31:00
絕不,永遠不要把它放在你的dealloc方法的中間或開始。你的子類變量可能嚴重依賴於超類變量,所以爲了安全起見,子類必須首先被釋放。在開始的時候使用簡單的子類[super dealloc]可以工作,但我建議你習慣在方法的末尾寫下它 - 使代碼易於擴展並且看起來更專業。另請注意,如果您省略[super dealloc],應用程序不會崩潰,但會產生內存泄漏。 – 2012-03-15 12:37:28
非常感謝你的努力! – user944351 2012-03-15 12:46:04
如果您使用ARC(在Xcode的最新版本的默認設置),然後保留/釋放可自動插入,你只需要擔心的對象圖(保持引用,當您需要使用一個對象,並避免循環引用)。
如果不是,你是正確的,dealloc
是釋放成員變量的正確的地方。儘管專門爲在viewDidLoad
中創建的那些,請記住,您的視圖可能會在控制器的生命週期內多次加載/卸載,因此請考慮使用viewDidUnload
來釋放這些對象。
如果您使用ARC(自動引用計數),你不知道。這是爲你自動完成的。如果你不使用ARC,那麼你可以像正常一樣在dealloc中手動執行它。請注意,新項目將自動使用ARC,如果您嘗試使用release
,retain
或autorelease
和對象,ARC會給您一個錯誤。
不,我不使用弧,因爲外部庫不支持這個。 – user944351 2012-03-15 12:32:24
是的,你會在一般的釋放他們在dealloc
。而且,如果他們在viewDidLoad
正在創建的,那麼你可能要釋放他們(和伊娃設置爲nil
)在viewDidUnload
,特別是如果該對象可以在當前狀態下一次viewDidLoad
被稱爲重建。
當然,如果你使用ARC那麼你並不需要顯式釋放你高德在dealloc
作爲ARC會產生dealloc
實現它可以實現這個要求。
我是否總是要釋放和無對象? – user944351 2012-03-15 12:38:09
在'viewDidUnload'中,肯定是。在'dealloc'中,這取決於。它不會傷害他們,但你可以在這裏讀到更多的問題:-)。 – mattjgalloway 2012-03-15 16:04:44
如果你想避免有關內存管理和u需要澄清關於烏爾對象分配和釋放他們懷疑內存泄漏的嚴重問題。試試這個鏈接http://iosdevelopertips.com/objective-c/memory-management.html
我的事情你是不是obj是否分配內存。 – 2012-03-15 12:23:48
如果你使用alloc,mutableCopy,new,copy來分配內存。然後你釋放。 – 2012-03-15 12:26:05