什么情况下使用weak关键字,与assign有什么不同?


什么情况下使用weak关键字

a.在ARC中,在可能出现循环引用的情况下,往往要通过让其中一端使用weak来解决,比如delegate.

b.自身已经对它进行一次强引用,没有必要再强引用一次,此时也会使用weak,自定义IBOutlet控件一般也使用weak。

为什么weak能打破循环引用?

weak与assign的不同点

a.weak此特质表明该属性定义了一种“非拥有关系”,为这种属性设置新值时,既不保留新值,也不释放旧值。此特质与assign类似,然而在属性所指的对象遭到摧毁时,属性值也会被清空nil 。而assign的“设置方法”只会执行针对“纯量类型”的简单赋值操作。当assign指针所指向的内存被释放(引用计数为0),不会自动赋值nil。如果调用assign修饰的属性,会导致野指针操作,如果这个操作发生时内存还没有改变内容,依旧可以输出正确的结果,如果内容发生了改变,就会crash。

b.assign可以用非OC对象,而weak必须用于OC对象

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1.ios高性能编程 (1).内层 最小的内层平均值和峰值(2).耗电量 高效的算法和数据结构(3).初始化时...
    欧辰_OSR阅读 29,797评论 8 265
  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 13,794评论 1 32
  • OC语言基础 1.类与对象 类方法 OC的类方法只有2种:静态方法和实例方法两种 在OC中,只要方法声明在@int...
    奇异果好补阅读 9,788评论 0 11
  • 看到微博上有人推荐,说这是一部烧脑神片,看过之后果然觉得很过瘾。随便写几点个人的解读。轻微剧透。 1. 全片的关键...
    易江禾阅读 11,461评论 4 6
  • 刚刚看了一部韩国电影,名字叫我们的世界,每看一格,就如硬生生的掀起一个个结痂的伤疤,带着血的疼痛使人清醒,也使人想...
    馬良阅读 1,592评论 0 0