我正在拼命地寻求帮助解决我的问题......
这完全属于ARC,BTW。
我有一个配置文件屏幕(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时,我什么也不做,只是从超级视图中删除视图(这与#horizontalCoverTransitionToViewController: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来解决问题的一些指示?
我开始怀疑一些底层框架错误,但如果我制作一个小样本应用程序来演示问题,它就可以正常工作,所以这个类必须有一些特殊的东西。
感谢您的任何意见。
答案 0 :(得分:2)
如果我打开Zombies,我可以看到SettingsVC已成为Zombie。
使用Instruments记录引用计数操作(Allocations) - 您也可以启用Zombies。程序停止后,在对象列表中找到VC,并查看该实例的记录引用计数操作。通常 非常清楚引入不平衡的地方,尽管可能会有比预期更多的操作。
答案 1 :(得分:0)
我认为问题在于您没有将settingsVC
ivar声明为strong
属性。根据Apple的内存管理规则,您不拥有- (id)instantiateViewControllerWithIdentifier:(NSString *)identifier
返回的View Controller;拥有它你应该声明你的ivar是一个强大的财产。请试一试。
@property(nonatomic, strong) SettingsVC *settingsVC;
希望这有帮助!