iOS ARC也會有記憶體洩露

2021-06-07 05:09:09 字數 1057 閱讀 5831

ios提供了arc功能,很大程度上簡化了記憶體管理的**。

但使用arc並不代表了不會發生記憶體洩露,使用不當照樣會發生記憶體洩露。

下面列舉兩種記憶體洩露的情況。

1,迴圈參照

a有個屬性參照b,b有個屬性參照a,如果都是strong參照的話,兩個物件都無法釋放。

這種問題常發生於把delegate宣告為strong屬性了。

例,@inte***ce sampleviewcontroller

@property (nonatomic, strong) sampleclass *sampleclass;

@end

@inte***ce sampleclass

@property (nonatomic, strong) sampleviewcontroller *delegate;

@end

上例中,解決辦法是把sampleclass 的delegate屬性的strong改為assing即可。

2,死迴圈

如果某個viewcontroller中有無限迴圈,也會導致即使viewcontroller對應的view關掉了,viewcontroller也不能被釋放。

這種問題常發生於animation處理。

例,比如,

catransition *transition = [catransition animation];

transition.duration = 0.5;

tansition.repeatcount = huge_vall;

[self.view.layer addanimation:transition forkey:"myanimation"];

上例中,animation重複次數設成huge_vall,乙個很大的數值,基本上等於無限迴圈了。

解決辦法是,在viewcontroller關掉的時候,停止這個animation。

[self.view.layer removeallanimations];

記憶體洩露的情況當然不止以上兩種。

即使用了arc,我們也要深刻理解ios的記憶體管理機制,這樣才能有效避免記憶體洩露。

iOS ARC也會有記憶體洩露

ios提供了arc功能,很大程度上簡化了記憶體管理的 但使用arc並不代表了不會發生記憶體洩露,使用不當照樣會發生記憶體洩露。下面列舉兩種記憶體洩露的情況。1,迴圈參照 a有個屬性參照b,b有個屬性參照a,如果都是strong參照的話,兩個物件都無法釋放。這種問題常發生於把delegate宣告為st...

記憶體洩露檢測

c 中檢測記憶體洩漏可以引入系統定義的巨集來檢視,內存在哪個位置洩漏 檔案開始處加入下列定義 define crtdbg map alloc include include 程式退出時加入以下函式 crtdumpmemoryleaks 如果有洩漏會顯示 記憶體洩漏是程式設計中常常見到的乙個問題,我所...

檢測記憶體洩露

程式結束時,作業系統會 程式占用的資源.但是,只要程式還在執行,如果不進行清理,資源最終可能被耗盡.1.vc記憶體洩露檢查工具 visual leak detector 現在已知的最新有2.0版本的,使方法不詳。使用 visual leak detector 2.2.3 在vs工程的linker i...