下面列舉兩種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改為week即可
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中的記憶體洩露
arc機制中是否就不存在記憶體洩漏呢,答案是肯定的.有的人也許會說arc中怎麼會存在記憶體洩漏呢,它不是自動管理記憶體嗎?世事無絕對!因為當乙個物件存入到集合中的時候,缺省會儲存它的強指標,如果最後不對這個集合進行清空操作,一樣會有記憶體溢位的情況 person p person alloc ini...
使用self 導致的記憶體洩露
請看第一段 在myobject.m中 self.aobj nsobject alloc init void dealloc 你能否看出這裡的記憶體洩露?接下來看第二段 aobj nsobject alloc init void dealloc 你能否看出這裡是否也有記憶體洩露呢?如果你都能夠很確定的...
使用self 導致的記憶體洩露
原文連線 ps 在新的框架中似乎不用考慮這些了,系統應該會自動計數和釋放。請看第一段 在myobject.m中 self.aobj nsobject alloc init void dealloc 你能否看出這裡的記憶體洩露?接下來看第二段 aobj nsobject alloc init void...