首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不会死的NSZombie

不会死的NSZombie
EN

Stack Overflow用户
提问于 2013-09-28 05:08:46
回答 2查看 160关注 0票数 1

我正在拼命地寻求帮助,解决一些困扰我的问题……

这一切都在ARC,BTW之下。

我有一个配置文件屏幕(UserProfileVC),然后您单击屏幕上的按钮,它将显示SettingsVC。SettingsVC保存在UserProfileVC的settingsVC ivar中,当我响应按钮单击时,我检查settingsVC是否为nil,然后从故事板创建它,并呈现它。

代码语言:javascript
复制
- (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,我会点击

代码语言:javascript
复制
if (!settingsVC) {...}

块,并且不要输入它(指示settingsVC仍然存在),然后只要我点击

代码语言:javascript
复制
[self horizontalCoverTransitionToViewController:settingsVC duration:0.35f];

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

如果我打开僵尸,我可以看到SettingsVC变成了僵尸。

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

释放是从消除SettingsVC的代码中调用的,但在我的应用程序中几乎所有其他VC都使用相同的代码,并且它们都不会引发释放。

有人能告诉我在哪里看,如何调试,甚至是一些关于使用Instruments来解决这个问题的建议吗?

我开始怀疑一些潜在的框架错误,但是如果我制作一个小的示例应用程序来演示这个问题,它工作得很好,所以这个类肯定有一些特殊的东西。

感谢您的任何意见。

EN

回答 2

Stack Overflow用户

发布于 2013-09-28 05:27:20

如果我打开僵尸,我可以看到SettingsVC变成了僵尸。

使用Instruments记录引用计数操作(分配) --您也可以启用僵尸。当你的程序暂停时,在对象列表中找到你的VC,并查看该实例的引用计数操作记录。通常很清楚不平衡是在哪里引入的,尽管可能会有比您预期的更多的操作。

票数 2
EN

Stack Overflow用户

发布于 2013-09-28 05:28:10

我认为问题在于您没有将settingsVC ivar声明为strong属性。根据苹果的内存管理规则,您并不拥有由- (id)instantiateViewControllerWithIdentifier:(NSString *)identifier返回的View Controller;要拥有它,您应该将您的ivar声明为一个强属性。请试一试。

代码语言:javascript
复制
@property(nonatomic, strong) SettingsVC *settingsVC;

希望这能有所帮助!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19060102

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档