zoukankan      html  css  js  c++  java
  • iOS闭包循环引用情况

    学习博客前需知道的概念有:闭包、Retain Cycle。

    我的博客主要来源于:

    https://mp.weixin.qq.com/s?__biz=MjM5OTM0MzIwMQ==&mid=404081690&idx=1&sn=43a783cb23bad5154e2e3f94303eea13&scene=0&uin=MTYzMDU2Njg2MQ%3D%3D&key=710a5d99946419d900eb41ea8134a224be2889a763e68a3756ee008ed775cc6887ec4eb2992e62d211f2ea1e536f8ae4&devicetype=iMac+MacBookAir6%2C2+OSX+OSX+10.10.5+build(14F27)&version=11020201&lang=zh_CN&pass_ticket=%2BtKiYsoFx546eqMxaj7GAlW2dpgBE%2Bl4OYqhW3uC%2BbWPuKvjKy8d8rG%2FmztgPdAx

    一、为什么在闭包中很容易造成循环引用呢?

    1、首先block属性修饰符必须是copy,这样类实例后对象持有block。

    2、在block块中,使用类的属性时,其实就是持有self对象。

    因此如何解决闭包中的循环引用问题?

    将self对象赋值给用weak修饰的对象,然后在block块中使用新对象。

    二、说到这个,就难免延伸到内存泄漏查找问题。

    1、用静态工具Analyze,标记内存泄漏的地方。(XCode->Product->Analyze)

    2、使用动态工具instrument的Leaks模板,包括Allocations模板在内。(XCode->Product->Profile)

    3、工具检查不出时,通过人为分析检查。

    另外,有个小技巧,可以在运行过后,查出没有被释放的对象。具体如:

    在dealloc方法中加入代码:NSLog(@"内存泄漏判断:%@", [[self class] description]);

    这样设置后,如果打印,则表示没有泄漏,如果没打印,则需要检查是否可以不释放该对象。

  • 相关阅读:
    css换行
    <a>标签里的<img>标签点击虚线框
    iframe子页面调用父页面元素
    快捷键
    用css绘制三角形
    解决div被embed,object覆盖问题
    一些兼容问题
    兼容padding
    记一次用html2canvas将页面内容生成海报并保存图片到本地
    PUPPETEER安装遇到 ERROR:CHROMIUM REVISION IS NOT DOWNLOADED.的解决办法
  • 原文地址:https://www.cnblogs.com/zhouyi-ios/p/5223977.html
Copyright © 2011-2022 走看看