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不会自动回收这些内存。
block中的循环引用
NSTimer的循环引用
addObserver的循环引用
delegate的强引用
大次数循环内存爆涨
非OC对象的内存处理(需手动释放)
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。