我正拼命地为正在困扰我的事情寻求帮助...

这一切都在ARC,BTW下。

我有一个Profile屏幕(UserProfileVC),然后单击该屏幕上的一个按钮,它显示SettingsVC。 SettingsVC保留在UserProfileVC的settingsVC ivar中,当我响应按钮单击时,我检查以查看settingsVC是否为nil,然后从情节提要中创建它并显示出来。

- (IBAction)handleSettingsButtonPressed:(id)sender {
    if (!settingsVC) {
        settingsVC = [self.storyboard instantiateViewControllerWithIdentifier:@"UPSettingsVC"];
        settingsVC.model = self.model;
        settingsVC.horizontalCoverPresentingVC = self;
    }

    [self horizontalCoverTransitionToViewController:settingsVC duration:0.35f];
}

当我关闭SettingsVC时,除了将视图从其 super 视图中删除之外,我什么也不做(本质上与#horizo​​ntalCoverTransitionToViewController:duration:方法相反)。我从来没有设置为零。

我可以从UserProfileVC导航到SettingsVC,然后返回...完全一次。如果我尝试返回到SettingsVC,请点击
if (!settingsVC) {...}

阻止,不要输入它(表明settingsVC仍然存在),然后在我点击
[self horizontalCoverTransitionToViewController:settingsVC duration:0.35f];

我收到EXC_BAD_ACCESS(code = 1 ...)错误。

如果打开Zombies,则可以看到SettingsVC变成了Zombie。

我什至可以将-fno-objc-arc添加到该类的编译器标志中,然后实现#release并在其中放置一个断点。

该版本从退出SettingsVC的代码中调用,但是我的应用程序中几乎所有其他VC都使用相同的确切代码,但没有一个导致发布。

有人可以给我任何想法,在哪里寻找,如何调试,或者甚至有关于使用Instruments解决问题的建议吗?

我开始怀疑存在一些潜在的框架错误,但是如果我制作了一个小示例应用程序来演示该问题,它就可以正常工作,因此该类必须有一些特殊的东西。

感谢您的任何投入。

最佳答案

如果打开Zombies,则可以看到SettingsVC变成了Zombie。

使用工具记录参考计数操作(分配)-您也可以启用僵尸。程序停止时,在对象列表中找到VC,然后查看该实例记录的引用计数操作。尽管可能会有比您预期的更多的操作,但通常很清楚在何处引入了不平衡。

关于ios - 不会死的NSZombie,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19060102/

10-10 17:23