delegate设为strong造成的内存泄露(两个对象相互强引用)
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
- 死循环造成的内存泄露
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];
}
- 非oc方法开辟的堆内存造成的泄露
使用malloc new 等非oc方法开辟的堆内存,需要使用对应的回收方法回收内存,arc不会自动回收这些内存。