__block与__weak的区别

block下循环引用的问题


__block本身并不能避免循环引用,避免循环引用需要在block内部把__block修饰的obj置为nil

__weak可以避免循环引用,但是其会导致外部对象释放了之后,block 内部也访问不到这个对象的问题,我们可以通过在 block 内部声明一个 __strong的变量来指向 weakObj,使外部对象既能在 block 内部保持住,又能避免循环引用的问题



__block与__weak功能上的区别。


__block会持有该对象,即使超出了该对象的作用域,该对象还是会存在的,直到block对象从堆上销毁;而__weak仅仅是将该对象赋值给weak对象,当该对象销毁时,weak对象将指向nil;

__block可以让block修改局部变量,而__weak不能。

另外,MRC中__block是不会引起retain;但在ARC中__block则会引起retain。所以ARC中应该使用__weak


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

推荐阅读更多精彩内容

  • 转自:http://blog.csdn.net/leikezhu1981/article/details/4500...
    hope7th阅读 411评论 0 0
  • Blocks理解:Blocks可以访问局部变量,但是不能修改如果修改局部变量,需要加__block 2、如果局部变...
    金丝楠阅读 477评论 0 2
  • 走走停停,拍一拍,尝一尝,岁月静好,生活美好!旅行,给自己的心放个假,放松自己,在旅途中去获得新的认知,收获不同的...
    夜色光影阅读 236评论 0 0
  • 是不是 所有形容 都需要 一个助词 匆忙去弥补音节 丢失遗憾莫明 写入情诗里 怎样才能 描述 一种美 属于你 藏于...
    名字带帅的糙汉阅读 187评论 0 1
  • 晨雾轻柔地包裹着这个城市,眼前似乎很轻薄,远处似乎很浓重。今天完全看不到平日粼光闪耀的江面,最近过得有些隔绝,联络...
    简小姐的笔阅读 664评论 0 46