引用类型
- 强引用
强引用是默认的引用类型,被强引用的内存不会被释放,强引用的引用计数会+1,从而扩展对象的生命周期 - 弱引用
弱引用是一种特殊的引用类型,他不会增加引用计数,因而不会扩展对象的生命周周期。
属性修饰符
- strong 默认修饰符。
创建对象后引用计数为1,在对象引用期间不会被回收 - weak
创建对象后引用计数为0,对象会被立即释放,且对象会被置为nil - assign
创建对象后引用计数为0,对象会被立即释放,且对象不会被置为nil - copy
创建对象后引用计数为1,当方法返回时对象会被立即释放 - retain
创建对象后引用计数为1,在对象引用期间不会被回收 - unsafe_unretained
创建对象后引用计数为0,对象会被立即释放,且对象不会被置为nil
如何避免内存泄漏、循环引用等一些消耗内存的情况出现
- 防止循环引用
不让对象相互持有 - 避免大量的单例
因为单例常常会在程序启动的时候进行初始化,而使用单例的组件需要等待他们准备好,这样就会增长应用的启动时间。尤其是第三方组件。 - 对子对象使用__strong
- 对父对象使用__weak
- 对使引用图闭合的对象(如委托)使用__weak
- 对数值属性(基本类型),使用assign限定符
- 对于块使用,使用copy限定符
- 避免块内直接引用外部的变量,在块外将他们weakify,并且在块内再将他们呢strongify。
- 进行必要的清理
销毁计时器
移除观察者(移除对通知的注册和KVO)
解除毁掉(将强引用的委托设置为nil)
网友评论