我正在拼命地寻求帮助,解决一些困扰我的问题……
这一切都在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时,除了从它的superview中删除视图之外什么也不做(这本质上与#horizontalCoverTransitionToViewController:duration:方法所做的相反)。我从未将其设置为零。
我可以在UserProfileVC和SettingsVC之间来回导航...就一次。如果我尝试返回到SettingsVC,我会点击
if (!settingsVC) {...}块,并且不要输入它(指示settingsVC仍然存在),然后只要我点击
[self horizontalCoverTransitionToViewController:settingsVC duration:0.35f];我得到了EXC_BAD_ACCESS (code=1...)错误。
如果我打开僵尸,我可以看到SettingsVC变成了僵尸。
我甚至将-fno-objc-arc添加到该类的编译器标志中,然后实现#release并在其中放置断点。
释放是从消除SettingsVC的代码中调用的,但在我的应用程序中几乎所有其他VC都使用相同的代码,并且它们都不会引发释放。
有人能告诉我在哪里看,如何调试,甚至是一些关于使用Instruments来解决这个问题的建议吗?
我开始怀疑一些潜在的框架错误,但是如果我制作一个小的示例应用程序来演示这个问题,它工作得很好,所以这个类肯定有一些特殊的东西。
感谢您的任何意见。
发布于 2013-09-28 05:27:20
如果我打开僵尸,我可以看到SettingsVC变成了僵尸。
使用Instruments记录引用计数操作(分配) --您也可以启用僵尸。当你的程序暂停时,在对象列表中找到你的VC,并查看该实例的引用计数操作记录。通常很清楚不平衡是在哪里引入的,尽管可能会有比您预期的更多的操作。
发布于 2013-09-28 05:28:10
我认为问题在于您没有将settingsVC ivar声明为strong属性。根据苹果的内存管理规则,您并不拥有由- (id)instantiateViewControllerWithIdentifier:(NSString *)identifier返回的View Controller;要拥有它,您应该将您的ivar声明为一个强属性。请试一试。
@property(nonatomic, strong) SettingsVC *settingsVC;希望这能有所帮助!
https://stackoverflow.com/questions/19060102
复制相似问题