Block内存泄露你知道吗

(不会首行缩进YoY,好像也没必要 )正文:以为用了ARC 静态内存分析 Instruments 检测没有问题就真的没有问题吗,错啦。大多数的内存问题都可以通过静态分析和Instrument Leak工具检测出来,但是有种block引用循环是难以检测的

在Block中用到self(self特指UIViewController),需要用_block或者_weak修饰(MRC与ARC的区别),因为Block调用会对其里面的对象引用计数加1,如果你不确定你调用的Block是否会产生循环引用的话,最好用_block 或者_weak修饰.

  __block DNWThirdVideoSubclassViewController *otherSelf = self;  
  [_videoPlayView changeViewBackGround:^{  
     
     [otherSelf pushDNWWedViewController:_thirdData.web_url];  
  }]; 

这个也有着引用的问题。*thirdData它是被self所持有,一次释放操作是放在dealloc中,也就是self被释放,_thirdData也释放.在Block中,调用了_thirdData,虽然没有用self.thirdData,但是正如前面所说,它是被self持有,编译访问_thirdData时,会找到持有它的self,对其引用计数加1,所以这里就算没有用到self,self的引用计数也被加1了,这也说明并不是没显示的调用self就不会对其引用计数加1。

[otherSelf pushDNWWedViewController:otherSelf.thirdData.web_url];OK

有错砸砖啊!!!!!!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 为什么进行内存管理? 由于移动设备的内存极其有限,所以每个APP所占的内存也是有限制的,当app所占用的内存较多时...
    天天想念阅读 994评论 1 6
  • iOS开发中, 之前一直使用swift, 因此对于Objective-C的内存管理机制长期处于混乱的一知半解状态....
    icetime17阅读 951评论 1 8
  • 29.理解引用计数 Objective-C语言使用引用计数来管理内存,也就是说,每个对象都有个可以递增或递减的计数...
    Code_Ninja阅读 1,754评论 1 3
  • *面试心声:其实这些题本人都没怎么背,但是在上海 两周半 面了大约10家 收到差不多3个offer,总结起来就是把...
    Dove_iOS阅读 27,658评论 30 472
  • Cocoa内存管理机制 (1)当你使用new、alloc、copy方法创建一个对象时,该对象的保留计数器值为1.当...
    John_LS阅读 2,879评论 0 6

友情链接更多精彩内容