博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ARC中的三个关键字
阅读量:4336 次
发布时间:2019-06-07

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

 

ARC中,变量可以用三个关键字修饰:

 

__strong: 赋值给这个变量的对象会自动被retain一次,如果在block中引用它,block也会retain它一次。

__unsafe_unretained: 赋值给这个变量不会被retain,也就是说被他修饰的变量的存在不能保证持有对象的可靠性,它可能已经被释放了,而且留下了一个不安全的指针。不会被block retain。

 __week:类似于__unsafe_unretained,只是如果所持有的对象被释放后,变量会自动被设置为nil,这样更安全些,不过只在IOS5.0以上的系统支持,同样不会被block retain。

 

另外我们也可以用 __block 关键字修饰一个变量,表示这个变量能在block中被修改(值修改,而不是修改对象中的某一个属性,可以理解为修改指针的指向)。会被自动retain。

于其他变量不同的是被 __block 修饰的变量在块中保存的是变量的地址。(其他为变量的值)

 

由于__block变量保存更为底层的变量地址, 因此当此变量被指向其他对象时,block便不对原来的对象负责,引发的结果就是之前对象被release掉,retain cycle被破坏。

__week也可以用 __unsafe_unretained 替代,但是 __week 更安全些,虽然它不支持IOS5.0以下的系统。

被 __week 或者 __unsafe_unretained 修饰的变量不会被block retain,所以不会形成retain cycle,但是小心,保证你的对象不会在complete之前被释放,否则会得到你意想不到的结果。

转载于:https://www.cnblogs.com/ranger-jlu/p/3828923.html

你可能感兴趣的文章
相信未来
查看>>
java Http请求
查看>>
Unix命令行学习
查看>>
CentOS查看显卡及GPU相关信息
查看>>
详细介绍Linux telnet命令的使用
查看>>
Centos7 安装相关软件
查看>>
Linux学习之路(一)命令基本格式
查看>>
查询区间返回时间列表及所需数据无数据则返回0
查看>>
12、angular路由
查看>>
(转)WP7 断点续传
查看>>
Oracle调整内存参后报ORA-00844和ORA-00851
查看>>
【转】iOS中属性与成员变量的区别
查看>>
浏览器兼容性问题,主要针对IE6~7
查看>>
Database-First,Model-First,Code-first
查看>>
Codeforces 757D - Felicity's Big Secret Revealed
查看>>
Python多线程应用示例
查看>>
A New Gyratory Crusher Recommended to You One
查看>>
TimePickerDialog、TimePicker、DatePickerDialog、DatePicker用法
查看>>
分布式系列十二: Redis高级主题
查看>>
Sublime 配置备份
查看>>