可可 – NSZombies正在吃我的应用程序的大脑!

可可 – NSZombies正在吃我的应用程序的大脑!,第1张

概述我有一个保留/释放问题.我的视图非常复杂,所以我将NSZombieEnabled设置为YES,并试图确定哪个对象导致我悲痛.为了加快这个过程,我想知道是否有跟踪僵尸回到坟墓的暗示或技巧,他们挖出了自己的方式(对不起,不得不)或者,回到他们关联的对象?神秘的控制台消息似乎没有提供太多的见解: NSInvocation: warning: object 0x1076850 of class '_NSZ 我有一个保留/释放问题.我的视图非常复杂,所以我将NSZombIEEnabled设置为YES,并试图确定哪个对象导致我悲痛.为了加快这个过程,我想知道是否有跟踪僵尸回到坟墓的暗示或技巧,他们挖出了自己的方式(对不起,不得不)或者,回到他们关联的对象?神秘的控制台消息似乎没有提供太多的见解:

NSInvocation: warning: object 0x1076850 of class '_NSZombIE_CALayer' does not implement methodSignatureForSelector: -- trouble ahead

我没有被称为“前方麻烦”的选择者.

编辑 – 包括堆栈跟踪:

#0  0x3026e017 in ___forwarding___#1  0x3024a0a2 in __forwarding_prep_0___#2  0x302042e8 in CFRelease#3  0x00c4fc31 in CALayerUpdateSublayers#4  0x00c4e173 in -[CALayer dealloc]#5  0x00c4000e in CALayerRelease#6  0x00c48dad in CALayerFreeTransaction#7  0x00c410b8 in CA::Transaction::commit#8  0x00c492e0 in CA::Transaction::observer_callback#9  0x30245c32 in __CFRunLoopDoObservers#10 0x3024503f in CFRunLoopRunspecific#11 0x30244628 in CFRunLoopRunInMode#12 0x32044c31 in GSEventRunModal#13 0x32044cf6 in GSEventRun#14 0x309021ee in UIApplicationMain#15 0x00001eb4 in main at main.m:14

编辑2:ObjectAlloc

在ObjectAlloc中查找有问题的内存地址,我找到两个匹配项:

#    Address     category           Creation Time      Size Responsible library Responsible Caller0   0x1076980   GeneralBlock-48    00:11.470       48      QuartzCore  -[CALayer setDelegate:]1   0x1076980   CALayer            00:11.552       48      UIKit       -[UIVIEw _createLayerWithFrame:]

挖掘#0 GeneralBlock-48:

#   category        Event Type  Timestamp   Address Size    Responsible library Responsible Caller0   GeneralBlock-48 Malloc      00:11.470   0x1076980   48  QuartzCore  -[CALayer setDelegate:]1   GeneralBlock-48 Free        00:11.551   0x1076980   -48 QuartzCore  -[CALayer addAnimation:forKey:]2   CALayer         Malloc      00:11.552   0x1076980   48  UIKit   -[UIVIEw _createLayerWithFrame:]

深入研究#1 CALayer:

#   category        Event Type  Timestamp   Address    Size Responsible library Responsible Caller0   GeneralBlock-48 Malloc      00:11.470   0x1076980   48  QuartzCore  -[CALayer setDelegate:]1   GeneralBlock-48 Free        00:11.551   0x1076980   -48 QuartzCore  -[CALayer addAnimation:forKey:]2   CALayer         Malloc      00:11.552   0x1076980   48  UIKit   -[UIVIEw _createLayerWithFrame:]

好吧,我现在看到在#0或#1深度钻探显示完全相同的信息.我想这应该减少一半的故障排除…但我仍然不知所措……

解决方法 我相信回溯只是僵尸被传达的地方.此回溯通常会为您提供有关导致崩溃的原因的零信息.它几乎只告诉你被过度释放的对象的类型和地址.

我经常用来跟踪这种过度发布的技术是使用Instruments的ObjectAlloc跟踪所有保留和发布.在ObjectAlloc中找到过度释放对象的地址,然后列出所有保留/释放调用,然后尝试平衡每个保留与释放.一旦找到没有保留匹配的版本,您就发现了问题.

总结

以上是内存溢出为你收集整理的可可 – NSZombies正在吃我的应用程序大脑!全部内容,希望文章能够帮你解决可可 – NSZombies正在吃我的应用程序的大脑!所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://www.outofmemory.cn/web/1017356.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-23
下一篇 2022-05-23

发表评论

登录后才能评论

评论列表(0条)

保存