iOS中造成dealloc不呼叫的原因

2021-09-20 16:03:14 字數 1132 閱讀 2609

以上給出的方法確實是對的,可以解決反覆切換地圖頁面和地圖上一級頁面記憶體暴增造成的閃退問題。但是這裡要說的不是這個問題,而是乙個新的問題,我在dealloc中打了斷點,但是dealloc根本就沒有執行,所以mapview也就根本就沒有釋放,記憶體還是一樣在暴增。為什麼viewcontroller已經被pop了,而viewcontroller的dealloc方法卻沒有被呼叫?(按理說viewcontroller被pop的時候它的dealloc的方法應該被呼叫才對)。

viewcontroller中存在nstimer

如果你的viewcontroller中有nstimer,那麼你就要注意了,因為當你呼叫

時,這個target:self就增加了viewcontroller的return count,如果你不將這個timer invalidate,將別想呼叫dealloc。

viewcontroller中有關的**

乙個比較隱秘的因素,你去找找與這個類有關的**,有沒有強引用屬性?比如乙個**的delegate應該是 assign 的現在是retain,(╯‵□′)╯︵┻━┻,就是這個,它會影響你不讓你呼叫dealloc,不信,就試試吧。(這個我還沒有遇到過)。

viewcontroller中有block

這個就是我我上面不進入dealloc的真正原因,block體內使用例項變數也會造成迴圈引用,使得擁有這個例項的物件不能釋放。

例如你這個類叫oneviewcontroller,有個屬性是nsstring *name; 如果你在block體中使用了self.name,那樣子的話這個類就沒法釋放。

要解決這個問題,mrc下只需

arc下將block 換為weak

***************==

uitapgesturerecognizer *tap = [[uitapgesturerecognizer alloc] initwithtarget:self action:@selector(closehmgoodsaddressselectview)];

[_backboard addgesturerecognizer:tap];

tap = nil;//置空,否則沒法dealloc釋放資源 

iOS中正確處理dealloc方法

當我們繼承類的時候,子類例項在構造的時候順序是先高用父類的構造方法,再呼叫子類的構造方法。在c c 是如此,在objc中也是如此,在ios開發中,我們會看到這樣的 1.void init 2.8.9.return self 10.看到沒,初始化的時候都是先呼叫父類的初始化方法,為什麼呢,因為父類更老...

iOS開發 ARC下dealloc的使用

在mrc時代,我們需要在 dealloc中做很多,比如釋放物件,等等 如今我們已經進入arc時代,對於普通物件的釋放,系統已經幫我們做好了 那是否可以高枕無憂了呢?在arc下我們應該做什麼?觀點 arc下,系統可以幫我們釋放該物件,及其包含的物件 但是卻無法釋放不屬於該物件的一些東西,如 1.通知的...

ios併發會造成什麼問題 痔瘡會造成什麼傷害?

隨著秋冬的臨近,痔瘡成為高發疾病,無論男女老少,都有可能成為痔瘡感染的 目標 由於早期症狀不明顯,很多人沒有意識到這一點,但隨著食物和生活習慣的發展,患者可能會出現大出血 痔瘡核逃脫 粘液滲出等情況,病情反 作,久病不癒,將會非常棘手。痔瘡的高發原因 1.喜歡刺激辣的食物 辛辣食物對胃腸刺激性大,會...