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...