没有合适的资源?快使用搜索试试~ 我知道了~
objective-c启用ARC时的内存管理

温馨提示
在objective-c中,内存的引用计数一直是一个让人比较头疼的问题。尤其是当引用计数涉及到arc、blocks等等的时候。似乎ARC的出现只是让我们解放了双手,由于底层实现依然依赖引用计数,所以开启ARC后,只有对引用计数机制更加了解,才能避免Cycle Retain、Crash等问题的出现。
资源推荐
资源详情
资源评论















objective-c启用ARC时的内存管理
http://www.xoneday.com
在 objective-c 中,内存的引用计数一直是一个让人比较头疼的问题。尤其是当引
用计数涉及到 arc、blocks 等等的时候。似乎 ARC 的出现只是让我们解放了双手,由于
底层实现依然依赖引用计数,所以开启 ARC 后,只有对引用计数机制更加了解,才能避
免 Cycle Retain、Crash 等问题的出现。
但是由于使用 ARC 可以显著提高编码效率,所以建议尽量启用 arc,本 文 内 容 也 将 以
arc 为主,所有测试等如未说明均表示开启 arc。
oc 中内存的管理主要依赖引用计数,而对引用计数的影响又依赖修饰属性(暂且这
么称呼),oc 中常用的修饰属性如下:
属性
(1)修饰属性(使用@property 定义时)
读写控制:
readwrite:可读可写,会生成 getter 和 setter 方法。
readonly:只读,只会生成 getter 方法,不会生成 setter 方法。
引用方式:
copy:拷贝,复制一个对象并创建 strong 关联,引用计数为 1 ,原来对象计数不
变。
assign:赋值,不涉及引用计数的变化,弱引用。ARC 中对象不能使用 assign,但
原始类型(BOOL、int、float)仍然可以使用。
retain:持有,对原对象引用计数加 1,强引用。ARC 中使用 strong。
weak:赋值(ARC), 比 assign 多了一个功能,对象释放后把指针置为 nil,避免了
野指针。
strong:持有(ARC), 等 同 于 retain。
线程安全:
nonatomic:非原子操作,不加同步,多线程访问可提高性能,但不是线程安全的。
atomic:原子操作,与 nonatomic 相反。

(2)修饰变量(修饰不使用@property 定义时,比如函数内的局部变
量)
__strong:是缺省的关键词,强引用。
__weak:声明了一个可以自动置 nil 的弱引用(ARC 中)。
__unsafe_unretained:声明一个弱引用,但是不会自动 nil 化(只有 iOS 4 才
应该使用)。
__autoreleasing: 用来修饰一个函数的参数,这个参数会在函数返回的时候被
自动释放(类似 autorelease)。
(3)默认的引用计数:
alloc:分配对象,分配后引用计数为 1。
autorelease:对象引用计数减 1,但如果为 0 不马上释放,等待最近一个 pool
时释放。
使用 ARC
ARC,全称叫 Automatic Reference Counting,该机制从 ios5 开始开始导入。简单
地说,就是代码中自动加入了 retain/release。所以,其底层机制还是引用计数,所以
掌握引用计数对内存管理依旧非常非常重要,我甚至觉得使用 arc 的前提就是充分了解
引用计数机制,否则几乎每天都要和 Cycle Retain、Crash 做斗争。
在你打开 ARC 时,你是不能使用 retain release autorelease 操作的,原先需要手
动添加的用来处理内存管理的引用计数的代码可以自动地由编译器完成了,但是你需要
在对象属性上使用 weak 和 strong, 其中 strong 就相当于 retain 属性,而 weak 相当于
assign,基础类型还是使用 assign。
剩余8页未读,继续阅读
资源评论

- 静持大师2015-11-02很好,帮助到了我

bo.cui
- 粉丝: 1091
上传资源 快速赚钱
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源
- 浅析人工智能在电子信息技术中的应用.docx
- 计算机控制系统.ppt
- Excel2003精品教程使用图表.ppt
- 光通信技术外文翻译.doc
- 网络安全建设方案.doc
- PLC控制八层电梯大学设计.doc
- 网络视频监控在中小学中的应用设计方案-教育文博.docx
- 气动机械手升降臂结构设计-面板操纵式(有动力)点位示教部分控制软件设计.doc
- 柳州职业技术学院综合布线.doc
- Java拼图游戏课程设计分析方案.doc
- 基于优课联盟的图像处理技术课程教学探索.docx
- 《微机原理接口技术》典型习题参考答案.doc
- 基于rs单片机多机串行通信的电子开关设计.doc
- 信息系统安全应急预案.doc
- jsp技术的企业网站.doc
- 论信息化内部控制审计与信息系统审计.docx
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈



安全验证
文档复制为VIP权益,开通VIP直接复制
