簡體   English   中英

UIViewController保留計數問題

[英]UIViewController retain count problem

我用下面的代碼創建一個新的UIViewController

GameViewController *temp = [[GameViewController alloc] initWithNibName:@"GameViewController" bundle:nil];
NSLog(@"retain count%d", [temp retainCount]);
temp.backgroundMusic = backgroundMusic;
self.gameView = temp;
[temp release];     
[self presentModalViewController:gameView animated:YES];                
[gameView release];

但是當我查看保留計數時,我的臨時視圖控制器返回4。

這怎么可能? 因為它是4,所以當我關閉視圖控制器時,無法將其從內存中刪除,並且我的游戲還在繼續進行。 (我可以看到AI播放的效果)。

永遠不要使用retainCount,它不會像您認為的那樣起作用。

如果需要查看對象的保留,釋放和自動釋放位置,請使用工具:

在樂器中運行,在分配中將“記錄參考計數”設置為開(必須停止記錄才能設置該選項)。 使選擇器運行,停止記錄,在其中搜索ivar(datePickerView),向下鑽取,您將能夠看到發生了所有保留,釋放和自動釋放的位置。

屏幕截圖示例

“您永遠不要使用retainCount ”。 這是一個很好的描述,為什么不這樣做: stackoverflow

我建議您不要使用keepCount,因為它通常會提供有關對象的實際keepcount的錯誤信息!

只需遵循適當的內存管理慣例即可!!!! 確實非常簡單,只需遵循NARC原則,僅釋放具有以下單詞的對象:New Alloc Retain Copy。 NARC! :)

我強烈建議您使用儀器中的內存泄漏工具,該工具會告訴您哪些對象尚未釋放,哪些對象已釋放,您正嘗試訪問。

在GameViewController中,您是否將背景音樂發布為

- (void)viewDidLoad{
   //Other nils
   self.backgroundMusic = nil;
}
- (void)dealloc{
    //Other releases
    [backgroundMusic release];
    [super dealloc];
}

暫無
暫無

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

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