iOS - ARC环境下dealloc/didReceiveMemoryWarning

block没那么难(三):block和对象的内存管理

一、iOS开发 ARC下dealloc的使用

ARC下,系统可以帮我们释放该对象,及其包含的对象;
但是却无法释放不属于该对象的一些东西,如:

  • 1.通知的观察者,或KVO的观察者

  • 2.对象强委托/引用的解除(例如XMPPMannerger的delegateQueue)
    对于其他的对象来把你当做委托 delegate时,并且是 强引用时,即时你自身被释放,但是引用你的对象依然还在,
    这时需要在引用你的对象移除该delegate

  • 3.做一些其他的注销之类的操作(关闭程序运行期间没有关闭的资源)
    一个对象,如一个ViewController在销毁之前有可能需要和server打交道;
    这时我们也可以在dealloc中写

关于dealloc的底层实现,可以参照objc运行时代码

- (void)dealloc  
{  
    [super dealloc];
    [[NSNotificationCenter defaultCenter] removeObserver:self];  //移除通知观察者  
    [[XMPPManager sharedManager] removeFromDelegateQueue:self];  //移除委托引用  
    [[MyClass shareInstance]  doSomething ];  //其他操作  
}  

二、viewController被POP后不调用dealloc的问题

1.1、控制器中NSTimer没有被销毁

当viewController中存在NSTimer时,需要特别注意,当调用

[NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(updateTime:)  userInfo:nil repeats:YES]

时,因为target:self,也就是引用了当前viewController,导致viewController控制器的引用计数加1,如果没有将这个NSTimer销毁,它将一直保留该viewController,无法释放,也就不会调用dealloc方法。所以,需要在viewWillDisappear之前需要把控制器用到的NSTimer销毁。

[timer invalidate]; // 销毁timer
timer = nil; // 置nil

1.2、viewController中的delegate不是weak属性

例如@property (nonatomic, weak) id delegate;代理要使用弱引用,因为自定义控件是加载在视图控制器中的,视图控制器view对自定义控件是强引用,如果代理属性设置为strong,则意味着delegate对视图控制器也进行了强引用,会造成循环引用。导致控制器无法被释放,最终导致内存泄漏。

1.3、viewController中block的循环引用

在ARC下,block会把它里面的所有对象强引用,包括当前控制器self,因此有可能会出现循环引用的问题。比如viewController中有个block属性,在block中又强引用了self或者其他成员变量,那么这个viewController与自己的block属性就形成循环引用,导致viewController无法释放。

三、didReceiveMemoryWarning

http://blog.csdn.net/wangyanchang21/article/details/50730902

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 原文链接http://www.cnblogs.com/kenshincui/p/4186022.html 音频在i...
    Hyman0819阅读 21,809评论 4 74
  • *面试心声:其实这些题本人都没怎么背,但是在上海 两周半 面了大约10家 收到差不多3个offer,总结起来就是把...
    Dove_iOS阅读 27,212评论 30 472
  • 把网上的一些结合自己面试时遇到的面试题总结了一下,以后有新的还会再加进来。 1. OC 的理解与特性 OC 作为一...
    AlaricMurray阅读 2,610评论 0 20
  • 序言 目前形势,参加到iOS队伍的人是越来越多,甚至已经到供过于求了。今年,找过工作人可能会更深刻地体会到今年的就...
    独酌丿红颜阅读 2,404评论 18 60
  • 她有一个很奇怪的名字,智慧。 为什么说奇怪,是因为她根本不爱上学,她爸妈却偏偏要她拥有非凡智慧,最好能考上大学,村...
    寿司__阅读 329评论 0 2