美文网首页
问题:请解释一下关键词的区别:assign vs weak, _

问题:请解释一下关键词的区别:assign vs weak, _

作者: 姜小舟 | 来源:发表于2020-05-08 09:27 被阅读0次

assign 和 weak

之前写过两者区别:问题:什么情况使用 weak 关键字,相比 assign 有什么不同?

  • assign 和 weak 都是不会增加对象的引用计数(弱引用),它们之间的区别是:当对象被销毁时,weak 修饰的变量指针会置为 nil,但是 assign 修饰的变量还是会指向原来的地址(这里就会出现野指针)。
  • 在我们平时开发一般都是用 assign 来修饰基本类型,weak 来修饰对象。

__block 和 __weak

  • 先来说一下 __weak,通过 __weak 来增加一个弱引用,这里常用来打破循环引用。
  • __block主要是为了解决 block 中匿名函数截获变量,产生的生命周期的问题。block 截获外部变量,默认是不可以取修改变量的,但是通过 __block 修饰的变量,在 block 内部可以修改。
  • __block:使用 __block修饰的变量在block代码块中会被retain(ARC下会retain,MRC下不会retain)
  • __weak:使用__weak修饰的变量不会在block代码块中被retain
    同时,在ARC下,要避免block出现循环引用 __weak typedof(self)weakSelf = self;

相关文章

网友评论

      本文标题:问题:请解释一下关键词的区别:assign vs weak, _

      本文链接:https://www.haomeiwen.com/subject/lgczghtx.html