vector v = new vector(10);
for (int i = 1; i < 100; i++)
如果我們僅僅釋放引用本身,那麼 vector 仍然引用該物件,所以這個物件對 gc 來說是不可**的。因此,如果物件加入到vector 後,還必須從 vector 中刪除,最簡單的方法就是將 vector 物件設定為 null。
1.由於 handler 屬於 tls(thread local storage) 變數, 生命週期和 activity 是不一致的。因此這種實現方式一般很難保證跟 view 或者 activity 的生命週期保持一致,故很容易導致無法正確釋放。
2.handler 為非靜態內部類,它會持有外部類的引用
解決:
1.將 handler 宣告為靜態的,則其存活期跟 activity 的生命週期就無關了。同時通過弱引用的方式引入 activity,避免直接將 activity 作為 context 傳進去
2.但是這樣做雖然避免了 activity 洩漏,不過 looper 執行緒的訊息佇列中還是可能會有待處理的訊息,所以我們在 activity 的 destroy 時或者 stop 時應該移除訊息佇列 messagequeue 中的訊息。
C 記憶體洩漏常見
程式中通常包含著靜態記憶體和棧記憶體。靜態記憶體用來儲存區域性static物件 類static資料成員以及定義在任何函式之外的變數 全域性變數 棧記憶體用來儲存定義在函式內的非static物件。分配在靜態或棧記憶體中的物件由編譯器自動建立和銷毀。對於棧物件,僅在定義的程式塊執行時才存在,程式退出,棧...
iOS 記憶體洩漏的常見場景
注意以creat,copy作為關鍵字的函式都是需要釋放記憶體的,注意配對使用。比如 cgcolorcreate cgcolorrelease 這部分不做詳細介紹,也是注意配對使用,需要說明的是,如果 中有部分檔案是mrc的,在已有檔案中加 的時候注意一下,不能都按照arc的方式處理。arc已經為我們...
iOS 記憶體洩漏的常見場景
注意以create,copy作為關鍵字的函式都是需要釋放記憶體的,注意配對使用。比如 cgcolorcreate cgcolorrelease 這部分不做詳細介紹,也是注意配對使用,需要說明的是,如果 中有部分檔案是mrc的,在已有檔案中加 的時候注意一下,不能都按照arc的方式處理。arc已經為我...