2015-10-20 50 views
0

我沒有使用ARC,並且對應用程序暫停時保留的所有對象發生了什麼感到困惑。iOS應用程序在主頁按下dealloc按

我一看這個線程,但它並沒有幫助那麼多:

iPhone. Shouldn't hitting the home button cause UIApplicationDelegate's dealloc to be called

我讀過多任務蘋果文檔,但無法明確找到的dealloc的任何信息。

我跑儀器,沒有發現任何泄漏,但我對當按下停止按鈕

會發生什麼不清楚所以我的問題是:

1)爲什麼有些我的dealloc方法被調用?例如,我的UIResponder的dealloc沒有被調用(當我雙擊我的iPad上的主頁按鈕並刪除我的應用程序),我的任何UIViewController對象也不是。

2)當我點擊Instruments上的停止按鈕(當它運行檢查泄漏時),應用程序放置在什麼模式下? (例如,不活動,背景,暫停......別的東西?)

因爲我的思維太習慣於C++的思維方式,其中應用程序退出導致析構函數被調用,所以我很難直觀地看到iOS當量。

iOS的部署目標:8.0

+0

我發現這些線程幫助:http://stackoverflow.com/questions/5079563/does-dealloc-method-being-executed-normally-when-quitting-the-application http://stackoverflow.com/questions/1533505/why-should-i-release-and-because-dealloc-objects-just-before-application-qui http://stackoverflow.com/questions/27523768/is-dealloc-always-called-even-when- you-swipe-close-an-app – Ash

回答

2
  1. 您的應用只需發送到後臺。它仍然在記憶中。如果用戶將您的應用程序重新啓動,那麼該應用程序就會停止。如果任何事情因爲不在前臺而無緣無故地被釋放,那將會很糟糕。當用戶雙擊主頁按鈕並移除應用程序時,該應用程序將很難被擊斃。見#2。
  2. 當您點擊Xcode中的停止按鈕時(或者用戶通過雙擊主頁按鈕來終止應用程序),您的應用程序將被終止。應用程序流程消失了。所有的內存和其他資源都被釋放。這是大錘。您的應用終止,不會有任何通知。想象一下,從命令行執行kill -9

這與使用ARC或沒有任何關係。它與使用Objective-C或C++或Swift無關。

+0

謝謝rmaddy。那麼dealloc的要點是什麼?它什麼時候被叫? – Ash

+0

它與C++中的析構函數相同。當沒有更多的對象引用時調用它。它可能是一個簡單的字符串超出範圍或視圖控制器被解僱。 – rmaddy

+0

是的,所以在應用程序生命週期中的哪一點將不存在對UIResponder和UINavigationController對象的引用? – Ash

相關問題