【问题标题】:UINavigationController releasing bonanzaUINavigationController 释放财富
【发布时间】:2010-10-11 03:08:49
【问题描述】:

在这段代码的最后:

UIViewController *viewController = [[UIViewController alloc] init];
UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController:viewController];
[viewController release];
[self presentModalViewController:navigationController animated:YES];
[navigationController release];

导航控制器像往常一样以模态显示,但是当我单击 viewController 上的按钮时,它会崩溃。实际上,viewController 的保留计数为 0。 如果我评论两个版本中的一个,一切都比预期的要好。 我几乎到处都能看到这段代码,有什么问题吗?

【问题讨论】:

    标签: ios objective-c memory-management uinavigationcontroller


    【解决方案1】:

    您发布的代码是正确的,但您在其他地方发布了一些内容。

    需要注意的几点:

    首先,never trust retainCount

    其次,确保您按照here 所述正确管理 nib 对象的内存。

    最后,您需要使用 Instruments 中的 NSZombie 检测来找出您真正的问题所在。 This video 提供了一个很好的方法。

    【讨论】:

    • 对于retainCount,我很确定我使用正确。除了默认的 MainWindow.xib,我没有使用任何 nib。不确定 NSZombie 在这种情况下是否会有所帮助,但实际上我应该试一试。
    • 重点是你不能正确使用retainCount。返回的数字是不可信的。这是一个没有意义的数字。
    • 我知道,但如果应用程序处于空闲状态,在一两秒后,它通常会给出一个有用的数字。我从来没有用过 NSZombie 和 Instruments,看起来实用多了!
    • 从追踪来看,“僵尸”似乎不是viewController,实际上是“self”viewController,显然我对任何发布消息不负责任。
    • 你有一个僵尸,因为你要么在不应该有的地方调用了release,要么你错过了你需要的retain。我建议您查看 Apple 的内存管理编程指南。 developer.apple.com/library/ios/#documentation/cocoa/Conceptual/…
    猜你喜欢
    • 2011-05-03
    • 1970-01-01
    • 2017-03-20
    • 1970-01-01
    • 2021-02-02
    • 2014-04-08
    • 2010-12-03
    • 1970-01-01
    • 2010-11-13
    相关资源
    最近更新 更多