ARC中的三个关键字
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
ARC中的三个关键字相关推荐
- 谈谈C#中的三个关键词new , virtual , override(装载 Winner.Net)
C#支持单继承,说到继承就不得不说new,virtual和override这三个关键词,灵活正确的使用这三个关键词,可以使程序结构更加清晰,代码重用性更高. 以下是msdn中对new,virtual和 ...
- 谈谈C#中的三个关键词new , virtual , override
谈谈C#中的三个关键词new , virtual , override C#支持单继承,说到继承就不得不说new,virtual和override这三个关键词,灵活正确的使用这三个关键词,可以使程序结 ...
- php中this,self,parent三个关键字
phpfunctionclass语言c this,self,parent三个关键字从字面上比较好理解,分别是指这.自己.父亲. this是指向当前对象的指针(姑且用C里面的指针来看吧) self是指向 ...
- PHP中的符号 -、= 和 :: 分别表示什么意思?以及this,self,parent三个关键字的理解!...
一.->,=>和::的区别 ->前面的变量是一个对象: $user->friends_count 取对象的friends_count属性. $t->homeTimelin ...
- php中this,self,parent三个关键字之间的区别(转载)
PHP5是一具备了大部分面向对象语言的特性的语言,比PHP4有 了很多的面向对象的特性,但是有部分概念也比较难以理解,这里我主要谈的是 this,self,parent三个关键字之间的区别.从字面上比 ...
- Java中的两个关键字——super、this
Java中的两个关键字--super.this 神话丿小王子的博客主页 一.super super 是java中方的一个关键字,用它可以引用父类中的成员: super可用于访问父类中定义的属性 sup ...
- java底层原理书籍_阿里面试题:Java中this和super关键字的底层实现原理
知道的越多,不知道的就越多,业余的像一棵小草! 编辑:业余草 来源:https://www.xttblog.com/?p=5028 B 站:业余草 最近一个粉丝加我说,接到了阿里的面试,问问我阿里会面 ...
- Hibernate中的三种数据持久状态和缓存机制
Java三大框架之--Hibernate中的三种数据持久状态和缓存机制 Hibernate中的三种状态 瞬时状态:刚创建的对象还没有被Session持久化.缓存中不存在这个对象的数据并且数据库中没 ...
- 没想到 | 万万没想到 Java 中最重要的关键字竟然是这个
Hi! 我是小小,今天是本周的第六篇,主要内容是关于 volatile 关键字. 前言 volatile 关键字主要是用于指令重排序,常常用于保证内存的可见性和防止指令重排序. 保证内存可见性 内存可 ...
最新文章
- python编写一个软件-如何用Python写一个计算器软件 附带效果图
- 一句话搞定python六剑客
- 如何做好iOS应用安全?这有一把行之有效的“三板斧”
- css注释_CSS注释示例–如何注释CSS
- 检测到磁盘可能为uefi引导_在本地硬盘安装WinPE系统,实现UEFI引导,摆脱U盘
- 从C语言到C++语言
- 阿里系多个产品线宕机,包括1688、淘宝、天猫、淘宝直播、闲鱼……
- C和指针 第十四章 习题
- DO / DTO / BO / VO / AO
- Qt 编译器添加 vs编译器
- 计算机专业窗体的事件何时触发,高三计算机专业VB试题(六)1
- (一)VirtualBox安装增强功能
- 如何调用CAD命令行命令?
- 《WEB安全渗透测试》(29)记一次HOST头投毒漏洞
- JavaScript基础-数组
- 世界上最有名和哲理的17句话
- 安卓期末大作业——校园二手街APP设计和实现
- 热门表情包+头像+壁纸自动采集多分类微信小程序源码下载支持多种流量主模式
- 关于QQ开心农场外挂 开发
- 论文投稿指南——SCI选刊