ARC下内存泄露的几种情况

  1. delegate设为strong造成的内存泄露(两个对象相互强引用)

  2. NSTimer 造成的内存泄露(两个对象相互强引用)
    self 持有 timer,timer 在初始化时持有 self,造成循环引用

// * interface@interface SomeViewController : UIViewController
@property (nonatomic, strong) NSTimer *timer;
@end
//* implementation@implementation SomeViewController
  - (void)someMethod
{
   timer = [NSTimer scheduledTimerWithTimeInterval:0.1                                             target:self  
                                          selector:@selector(handleTimer:)  
                                          userInfo:nil  
                                           repeats:YES];  
}
@end

解决的方法就是使用 invalidate 方法销毁掉 timer

  1. 死循环造成的内存泄露
 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];
}
  1. 非oc方法开辟的堆内存造成的泄露
    使用malloc new 等非oc方法开辟的堆内存,需要使用对应的回收方法回收内存,arc不会自动回收这些内存。

你可能感兴趣的:(ARC下内存泄露的几种情况)