2010-08-07 83 views
1

我有一個視圖基於應用程序,當我檢查,如果dealloc方法在幹活,我看到那不...調試和調試,然後用retainCount,我發現,我的ViewController retaincount變得瘋狂在程序啓動...它容易重現....視圖基於應用 - 後視圖控制器retainCount [窗口addSubview:viewController.view];

剛開始一個新的觀點基於應用程序模板,並在didFinishLaunchingWithOptions:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {  

    // Override point for customization after app launch. 
NSLog(@"i1 %i",[viewController retainCount]); 
    [window addSubview:viewController.view]; 
NSLog(@"i2 %i",[viewController retainCount]); 
    [window makeKeyAndVisible]; 

return YES; 
} 

我在控制檯上了:

[Session started at 2010-08-07 09:57:34 -0300.] 
2010-08-07 09:57:35.132 teste1[20367:207] i1 2 
2010-08-07 09:57:35.138 teste1[20367:207] i2 8 

這是正確的?

然後當我按下iphone home鍵即可關閉應用,dealloc的methos訥韋爾被調用,我相信因爲的viewController的retainCount ....我是正確的?

這是蘋果的視圖應用程序模板...應該工作...犯規呢?

有人能解釋我爲什麼最初retaincount爲2 ?????另外8個廈門國際銀行的文件是空白....

+0

初始保留計數後,頁頭是1.您沒有登錄權分配後,但過一段時間後,當框架有機會做一些活動。同樣,您不必擔心保留數量,因爲使用這種技術不太可能發現您的內存管理錯誤,只需遵循規則,您應該沒問題。 – Pablo 2010-08-07 13:13:58

回答

2

你不必,只要您遵循內存管理規則擔心你的對象的實際保留計數。該框架可能會保留或釋放對象,因此保留計數將在您的控制之外被更改。

+0

好,感謝您的回覆.... BU我把一些NSLog的一些其他的dealloc方法,當我按下home鍵,他們不叫....我應該關心的是什麼? – costamatrix 2010-08-07 13:47:38

+0

@costamatrix:如果他們是你的應用程序的整個生命過程中的生活,那麼不用擔心,系統會清除它們後您的應用程序將終止。如果在應用程序生命週期中有某些應該動態創建和銷燬的東西,並且沒有看到調用dealloc方法,那麼您應該開始擔心。 – Pablo 2010-08-07 14:09:17

1

您可能沒有獲得終止應用程序時叫的dealloc。這不是測試的方式。並且根視圖控制器始終存在於應用程序中。你應該關心你自己創建的其他類,並確保它們的dealloc在被調用時(而不是在終止時)被調用。也不要依賴retainCount。 Apple建議不要使用它。

假設有兩個視圖和比根視圖控制器其他相應的視圖控制器。在第一個視圖中,您創建了其他對象。現在,當切換到第二視圖時,如果不需要,則應釋放第一視圖的內存。在這種情況下,您應該測試第一個視圖的對象是否真的被釋放。如果你用這種方式編碼,但他們沒有被調用,那麼肯定有泄漏。但是,是的,你不應該在應用程序終止時進行測試。