iOS ARC也会有内存泄露
来源:互联网 发布:淘宝闲鱼拍卖是正品吗 编辑:程序博客网 时间:2024/05/21 05:21
转:点击打开链接
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改为assing即可。
ARC通过记录指向某对象的指针数量来判断该对象是否应该被释放(0代表可以释放)。因而如果出现循环引用,就会出现内存泄露。如下图所示。
取消3->2的引用 导致泄露。
ARC的解决办法也和简单,使用弱引用(weak reference)。弱引用的申明方式举例如下:
id __weak P;
@property (weak) NSVIew *V;
还是以上面的例子做对比,结果如下:
弱引用不增加计数, 从而消除leak。
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];}
内存泄露的情况当然不止以上两种。
即使用了ARC,我们也要深刻理解iOS的内存管理机制,这样才能有效避免内存泄露。
0 0
- iOS ARC也会有内存泄露
- iOS ARC也会有内存泄露
- iOS ARC也会有内存泄露
- iOS ARC也会有内存泄露
- iOS ARC也会有内存泄露
- iOS ARC也会有内存泄露
- iOS ARC 内存泄露问题
- [IOS 开发] ARC内存泄露
- iOS ARC下内存泄露 注意点
- IOS ARC下内存泄露总结
- IOS ARC内存管理,提高效率避免内存泄露
- IOS ARC内存管理,提高效率避免内存泄露
- IOS ARC内存管理,提高效率避免内存泄露
- arc依然内存泄露??!?!?!?!?!??
- ARC-分析内存泄露
- ARC中的内存泄露
- iOS开发 ARC下造成内存泄露的问题
- iOS ARC内存泄露的几种情况总结
- Lua学习笔记 第二章 类型与值
- 为什么写Java程序需要接口
- Oracle 11g ddl_lock_timeout
- 通用异常处理框架
- CentOS远程桌面
- iOS ARC也会有内存泄露
- android心得
- ANDROID自定义视图——onMeasure,MeasureSpec源码 流程 思路详解
- Oracle minus使用
- 使用Jquery.lazyload框架提升网站页面加载性能。
- aloge alogw alogi alogd alogv
- 464646
- ubuntu 14.04 vnc 配置桌面
- Objective-C中的instancetype和id区别