[英]UITableView Object leaked: allocated object is not referenced later in this execution path and has a retain count of +1
[英]How do I fix a leaked object with a retain count of +1?
以下代碼中有一個泄漏的對象。 我如何解決它? 我嘗試添加[apiViewController版本]; 但是當我分析應用程序時,我仍然得到:
if (idx == 2) {
NSLog(@"you touched menu 2");
APICallsViewController *apiViewController = [APICallsViewController alloc];
[self.navigationController pushViewController:apiViewController animated:YES];
//[apiViewController getFriendsCallAPIDialogFeed];
[apiViewController getAppUsersFriendsUsing];
}
謝謝你的幫助
您忘記了-init和-release。
APICallsViewController *apiViewController = [[APICallsViewController alloc] init];
...
[apiViewController release];
您可能需要閱讀Objective-C編程 。
首先,您需要初始化,如hwaxxer和Justin Boo所建議的。
其次,一些人建議使用autorelease
。 autorelease
是一個延遲的release
,除非需要,否則通常不應該這樣做(例如,您的方法需要將釋放推遲到以后,以便它可以將對象返回給調用者)。 簡而言之,僅在將對象返回給方法的調用者時才使用autorelease
,否則請使用release
。 在這種情況下,您應該使用release
。
在這種特定情況下,這無關緊要(因為通過推動視圖控制器,它還是會保留下來,直到該視圖從堆棧中彈出之前才被釋放),但是如果您要執行自己的內存管理(即不使用ARC),這是值得采用的良好做法,即release
時,你可以(如在這種情況下),只有autorelease
,當你返回對象方法的調用者,因此必須推遲release
。
第三,建議閱讀並確保您了解Advanced Memory Management 。 這為您提供了一些您真正需要了解的內存管理基本規則(例如,如果創建了內存,則您擁有它,必須釋放它)。
第四,一旦您熟練掌握了內存管理(並且只有在這樣做之后,這才可以真正了解正在發生的事情),所以我建議您認真考慮過渡到ARC ,因為您不必處理很多事情蠢事。
對於分配/保留的每個對象,您都有責任釋放。
后
[apiViewController getAppUsersFriendsUsing];
放...
[apiViewController release];
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.