博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
关于 MRC 开发中的一些细节
阅读量:6229 次
发布时间:2019-06-21

本文共 917 字,大约阅读时间需要 3 分钟。

 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

你可能感兴趣的文章
jQuery对新添加的控件添加响应事件
查看>>
Mui --- app与服务器之间的交互原理、mui ajax使用
查看>>
Swift协议(Protocol)
查看>>
Ubuntu Docker 安装和配置 GitLab CI 持续集成
查看>>
[ACM_水题] ZOJ 3706 [Break Standard Weight 砝码拆分,可称质量种类,暴力]
查看>>
phpmailer绑定邮箱
查看>>
(译)你应该知道的jQuery技巧
查看>>
[LeetCode] Divide Two Integers
查看>>
第 59 章 Connector
查看>>
buildroot mysql mysql.mk hacking
查看>>
排序箭头,升序,降序简单实现
查看>>
BZOJ 3097: Hash Killer I【构造题,思维题】
查看>>
8.2. OpenMediaVault
查看>>
Meanshift filter实现简单图片的卡通化效果
查看>>
关于排序算法的理解(一)
查看>>
(第六天)DOM
查看>>
bootstrap-fileinput使用
查看>>
使用nginx搭建rtmp服务器
查看>>
setTimeout,setInterval你不知道的事
查看>>
Linux系统安装_Centos6.9
查看>>