当前位置:  开发笔记 > IOS > 正文

打印一个对象的强主,Swift

如何解决《打印一个对象的强主,Swift》经验,为你挑选了2个好方法。

我的iOS应用程序中有一些保留周期.

对于一个特定的viewController,陷入了一个保留周期,我试图让所有代表都变弱.但是当我从模拟器模拟内存警告时,会调用didRecieveMemoryWarning,但不会调用deinit方法.

我想打印/看到在调用didRecieveMemoryWarning时仍然持有它的viewController的所有者.有什么方法可以做到这一点.



1> weber..:

如果您使用的是Xcode 8,则可以使用Memory Graph Debugger直观地查看项目中对象的活动内存图.您可以使用下面显示的三个圆圈图标进入Memory Graph Debugger. 在此输入图像描述

Memory Graph Debugger在以下讲座中于2016年WWDC上亮相,从24:30左右开始.

https://developer.apple.com/videos/play/wwdc2016/410/



2> Duncan C..:

没有,没有一种方法可以打印出您所描述的对象的所有者,至少不能完全打印出来。iOS不使用垃圾收集,它使用ARC(自动引用计数)。系统不在ARC中跟踪拥有的引用。相反,每次向对象添加所有者引用时,系统都会增加保留计数,并且每次清除所有者引用时,系统都会减少保留计数。

但是,您可以使用存储仪器运行程序。(有一个名为“ Instruments”的调试应用程序,您可以在Instruments程序中选择一个称为“ instrument”的调试模板。)使用内存工具,您可以跟踪对象的生命周期,并跟踪对象的生命周期。应用程序堆中活动对象的数量。当您在当前活动对象列表中选择一个对象时,您可以看到它在程序中的分配位置以及创建强引用的代码的来源。但是,如何使用Instruments进行解释超出了SO职位的范围。关于此主题,有各种教程和WWDC会话视频。我建议做一些搜索。

关于您的问题,强制执行内存不足警告不会导致活动的视图控制器(屏幕上的一个)被释放,并且不会调用deinit方法。系统维护了对视图控制器的强烈引用。

另外,默认情况下,您应该使委托引用弱。具有委托人引用作为强力引用非常不寻常。出于特定原因,我只看过一两次。

推荐阅读
手机用户2502851955
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有