关于 MRC 开发中的一些细节

 1. 谁申请,谁释放,适用于面向对象开发的一个原则,“配对原则”

 2. 如果在实例化对象的时候,使用了 alloc,retain,copy,new(alloc&init),就需要有对应的 release 方法

    - allocWithZone 不需要配对的 release

 3. 工具-静态分析工具(analysis)

    可以从代码结构上分析是否存在内存缺陷,本身不会运行代码,能够发现大部分的问题

 4. 如果一个方法需要返回对象,这个要返回的对象就需要添加 autorelease,对象会在自动释放池销毁之前被销毁

    从而达到延迟释放的效果!

 5. 如果是自定义 Copy 对象,需要使用 allocWithZone 方法为对象分配空间!

 6. 如果自定义对象中有 copy,retain(相当于 arc 的strong)

    需要在 dealloc 方法中释放

 7. 知识点补充:

    什么时候用 _name?什么时候用 self.name?

    -self.name 是属性,对应有 getter&setter方法

        *** 使用 self.name 能够借助默认的 setter 方法保证引用计数的平衡

    -_name 是成员变量,是内存中的实例

        使用细节

        ** 在第一次使用的时候,苹果官方建议使用 _name,赋初始值,例如:loadView,viewDidLoad方法中

        提示:如果使用懒加载除外

        ** 在dealloc方法中使用 _name

 // MRC 的 setter 方法中

 - (void)setName:(NSString *)name {

    // 1. 判断赋值的 name 和原来 _name 成员变量中保存的内容是否一致

    if (name != _name) {

        // 释放旧值

         [_name release];

         

         _name = name;

         // 对新的值进行强引用

         [_name retain];

    }

 }

 8.如果是使用类方法,或者其他返回自动释放的对象,那么需要自己retain,否则一次运行循环后,就会被释放!

我的能力超乎我的想象 我的奋斗决定我的未来
原文地址:https://www.cnblogs.com/zhaoyanpeng/p/4649266.html