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中的三个关键字相关推荐

  1. 谈谈C#中的三个关键词new , virtual , override(装载 Winner.Net)

    C#支持单继承,说到继承就不得不说new,virtual和override这三个关键词,灵活正确的使用这三个关键词,可以使程序结构更加清晰,代码重用性更高. 以下是msdn中对new,virtual和 ...

  2. 谈谈C#中的三个关键词new , virtual , override

    谈谈C#中的三个关键词new , virtual , override C#支持单继承,说到继承就不得不说new,virtual和override这三个关键词,灵活正确的使用这三个关键词,可以使程序结 ...

  3. php中this,self,parent三个关键字

    phpfunctionclass语言c this,self,parent三个关键字从字面上比较好理解,分别是指这.自己.父亲. this是指向当前对象的指针(姑且用C里面的指针来看吧) self是指向 ...

  4. PHP中的符号 -、= 和 :: 分别表示什么意思?以及this,self,parent三个关键字的理解!...

    一.->,=>和::的区别 ->前面的变量是一个对象: $user->friends_count 取对象的friends_count属性. $t->homeTimelin ...

  5. php中this,self,parent三个关键字之间的区别(转载)

    PHP5是一具备了大部分面向对象语言的特性的语言,比PHP4有 了很多的面向对象的特性,但是有部分概念也比较难以理解,这里我主要谈的是 this,self,parent三个关键字之间的区别.从字面上比 ...

  6. Java中的两个关键字——super、this

    Java中的两个关键字--super.this 神话丿小王子的博客主页 一.super super 是java中方的一个关键字,用它可以引用父类中的成员: super可用于访问父类中定义的属性 sup ...

  7. java底层原理书籍_阿里面试题:Java中this和super关键字的底层实现原理

    知道的越多,不知道的就越多,业余的像一棵小草! 编辑:业余草 来源:https://www.xttblog.com/?p=5028 B 站:业余草 最近一个粉丝加我说,接到了阿里的面试,问问我阿里会面 ...

  8. Hibernate中的三种数据持久状态和缓存机制

    Java三大框架之--Hibernate中的三种数据持久状态和缓存机制 Hibernate中的三种状态   瞬时状态:刚创建的对象还没有被Session持久化.缓存中不存在这个对象的数据并且数据库中没 ...

  9. 没想到 | 万万没想到 Java 中最重要的关键字竟然是这个

    Hi! 我是小小,今天是本周的第六篇,主要内容是关于 volatile 关键字. 前言 volatile 关键字主要是用于指令重排序,常常用于保证内存的可见性和防止指令重排序. 保证内存可见性 内存可 ...

最新文章

  1. python编写一个软件-如何用Python写一个计算器软件 附带效果图
  2. 一句话搞定python六剑客
  3. 如何做好iOS应用安全?这有一把行之有效的“三板斧”
  4. css注释_CSS注释示例–如何注释CSS
  5. 检测到磁盘可能为uefi引导_在本地硬盘安装WinPE系统,实现UEFI引导,摆脱U盘
  6. 从C语言到C++语言
  7. 阿里系多个产品线宕机,包括1688、淘宝、天猫、淘宝直播、闲鱼……
  8. C和指针 第十四章 习题
  9. DO / DTO / BO / VO / AO
  10. Qt 编译器添加 vs编译器
  11. 计算机专业窗体的事件何时触发,高三计算机专业VB试题(六)1
  12. (一)VirtualBox安装增强功能
  13. 如何调用CAD命令行命令?
  14. 《WEB安全渗透测试》(29)记一次HOST头投毒漏洞
  15. JavaScript基础-数组
  16. 世界上最有名和哲理的17句话
  17. 安卓期末大作业——校园二手街APP设计和实现
  18. 热门表情包+头像+壁纸自动采集多分类微信小程序源码下载支持多种流量主模式
  19. 关于QQ开心农场外挂 开发
  20. 论文投稿指南——SCI选刊

热门文章

  1. 世界级Oracle专家Jonathan Lewis:我很为DBA们的未来担心(图灵访谈)
  2. PHP语法(3.)环境变量
  3. XML 命名空间(XML Namespaces)介绍以及节点读取方法
  4. Oracle的分区操持
  5. unity3d 数学基础与数学辅助类
  6. leetcode算法题--不用加减乘除做加法
  7. python主函数的作用_python中main函数的用法
  8. cocos2d-x 输出debug信息
  9. 8K投影仪+大银幕,日本系统Sphere5.2不用头显也能体验VR
  10. 百度地图- - - 鹰眼轨迹- - - -实时定位