ios 循环引用(block)

     

     循环引用,顾名思义就是开发过程中两个对象之间互相引用,形成一个环路。在MRC时代,内存都是程序员手动管理,每一个对象、实例都需要程序员通过retain release操作去控制引用计数,这种时候虽然更加繁琐,但是内存都在程序员的控制范围内。但是在使用ARC的时候,由于内存是ios 在编译期通过系统的判断去动态的将内存控制代码(retain release delloc)添加到代码中的合适位置。虽然很大程度上解决了开发人员,使得开发人员可以将精力更多的放到app功能的开发中,但是由于内存管理对程序员的不可控,使得在开发人员不知情的情况下发生内存泄漏的情况很容易发生。

      如果程序中产生了循环引用的问题,会由于对象之间互相引用,导致两者都得不到释放,从而导致内存泄漏。

block在ios开发过程中使用的情况非常多,block块中使用块外的变量、对象的情况也非常多,当我们在使用block的时候发生这样的情况,就会产生内存泄露。

某对象是某block的拥有者,而block中又使用了此对象,这是很经典的一个情况,解决的办法一个是将此对象nil,另一中是解决循环引用通用的方法。

将循环引用的一方改为弱引用另一方 :__weak typeof(self) weakSelf=self; 等

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

推荐阅读更多精彩内容

  • 《Objective-C高级编程》这本书就讲了三个东西:自动引用计数、block、GCD,偏向于从原理上对这些内容...
    WeiHing阅读 9,917评论 10 69
  • *面试心声:其实这些题本人都没怎么背,但是在上海 两周半 面了大约10家 收到差不多3个offer,总结起来就是把...
    Dove_iOS阅读 27,219评论 30 472
  • iOS代码块Block 概述 代码块Block是苹果在iOS4开始引入的对C语言的扩展,用来实现匿名函数的特性,B...
    smile刺客阅读 2,376评论 2 26
  • 前言 Blocks是C语言的扩充功能,而Apple 在OS X Snow Leopard 和 iOS 4中引入了这...
    小人不才阅读 3,789评论 0 23
  • Block使用场景,可以在两个界面的传值,也可以对代码封装作为参数的传递等。用过GCD就知道Block的精妙之处。...
    Coder_JMicheal阅读 743评论 2 1