IOS的ARC會致使的內存泄露問題和解決方案

下面列舉兩種ARC致使內存泄露的狀況。

1,循環參照

A有個屬性參照B,B有個屬性參照A,若是都是strong參照的話,兩個對象都沒法釋放。

這種問題常發生於把delegate聲明爲strong屬性了。

例,

@interface SampleViewController

@property (nonatomic, strong) SampleClass *sampleClass;

@end

@interface 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。

-(void)viewWillDisappear:(BOOL)animated {

    [self.view.layer removeAllAnimations];

}
相關文章
相關標籤/搜索