簡體   English   中英

釋放消息后,保留視圖控制器的計數不等於零

[英]retain count of a view controller not equal zero after a release message

我有一個這樣初始化的視圖控制器: HomeViewController *homeVC = [[HomeViewController alloc] initWithNibName:@"HomeViewController" bundle:nil];

然后,在完成使用此視圖控制器的工作后,我放置了此方法: [homeVC release]; 並且在它之后,我已經放置了NSLog@("%d",[homeVC retainCount]); 控制台顯示15作為retainCount編號,但是,我輸入了兩個[homeVC release]; 行和相同的NSLog語句,結果=應用程序崩潰...

兩個問題:

1)有人可以解釋嗎?

2)如何使retainCount等於零?

  1. iOS SDK內部的代碼的各個部分也可以/將保留您的視圖控制器,特別是如果您將其推向視圖控制器,以模態呈現,將其與選項卡控件相關聯或對其進行任何其他重要的事情。 簡而言之,您並不是唯一一個使用視圖控制器的人。 崩潰的發生僅​​僅是因為添加第二個版本導致視圖控制器最終被釋放了太多次。

    而且,通常不建議手動檢查對象的保留計數,特別是因為諸如此類的情況,其中實際值與開發人員可能期望的值不匹配。

  2. 通過每一個匹配alloc/initretaincopy與調用release ,並沒有擔心正是當保留計數達到精確為零(如果你真的想知道發生這種情況時,設置一個斷點dealloc )。 您必須編寫不會泄漏或過度釋放對象的代碼,並假設iOS SDK會執行相同的操作,並相信您的對象將在正確的時間點被釋放。 或者,切換到SDK版本5並改用自動垃圾收集。

不要使用keepCount 這是沒有意義的。 只需遵循內存管理規則 ,當您是所有者時釋放就可以了。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM