• 关于 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,否则一次运行循环后,就会被释放!

    我的能力超乎我的想象 我的奋斗决定我的未来
  • 相关阅读:
    python接口自动化基础框架结构 ——分层
    常见的布局实现,以及响应式布局技巧。
    google closure继承模块三:goog.base()源码分析
    google closure--继承模块二:goog.base()demo分析
    google closure--继承模块一:goog.inherits()
    项目中踩过的坑之-sessionStorage
    .NET/C#使用NPOI操作Excel
    WEB免费打印控件推荐
    Linux下部署ASP.NET项目
    Hibernate 查询方式(HQL/QBC/QBE)汇总
  • 原文地址:https://www.cnblogs.com/zhaoyanpeng/p/4649266.html
Copyright © 2020-2023  润新知