我们现在有一个相当大的应用程序,我们最近升级到iOS 10.这样做会引入一个新的错误,我们不知道怎么样解决它。
在调用layoutIfNeeded()期间发生崩溃。但是,除非layoutIfNeeded()调用包含在UIView.animateWithDuration()块中,否则不会发生崩溃。没有任何弱的引用,延迟或调度呼叫似乎有任何影响。在调用[super viewWillTransitionToSizeWithTransitionCoordinator]时可以触发相同的崩溃。
" Objective-C消息被发送到解除分配的' Bubble'对象(僵尸)地址:0x10924f030。"
启用Zombies显示我们有一个Release调用发送到我们的UIView子类之一,我们将其命名为Bubble。没有什么特别的,一些布局约束和手势识别器。
Instruments应用程序没有多大帮助,Xcode 8中也没有新的可视内存调试器(虽然它很棒,很少有关于该功能的文档)。
我已加入screenshot of Zombies during the crash here。虽然我知道保留计数可能会产生误导,但对于跟踪肯定存在一些令人困惑的问题,我们可以使用一些帮助来诊断这一点。
同样,这段代码在iOS 10之前运行良好。我们无法找到Apple关于UIKit可能产生影响的潜在变化的任何笔记。
更简短的信息:[Bubble cleanBubbles]简单地迭代传入的任何视图的子视图,如果它是一个Bubble类,则删除子视图。
对某些违反命名惯例的行为表示抱歉,我确定有很多可以批评的内容!
由于