iphone - 在发布消息后保留 View Controller 的计数不等于零

标签 iphone objective-c ios

我有一个这样初始化的 View Controller :HomeViewController *homeVC = [[HomeViewController alloc] initWithNibName:@"HomeViewController" bundle:nil];
然后,在我使用完这个 View Controller 后,我放置了这个方法:[homeVC release]; 紧随其后我已放置 NSLog@("%d",[homeVC retainCount]);控制台将 15 显示为 retainCount数字,但是,我把双 [homeVC release];行和相同的NSLog声明,结果 = 应用程序崩溃...

两个问题:

1)有人可以解释吗?

2) 如何制作 retainCount等于零?

最佳答案

  • iOS SDK 内部代码的各个部分也可以/将保留您的 View Controller ,特别是如果您正在推送它,以模态方式呈现它,将它与选项卡控件相关联,或者用它做几乎任何其他重要的事情。简而言之,你不是唯一一个使用你的 View Controller 的人。并且您的崩溃发生只是因为添加第二个版本会导致 View Controller 最终被释放太多次。

    此外,通常不建议手动检查对象的保留计数,特别是因为在这种情况下,实际值与开发人员可能期望的值不匹配。
  • 通过匹配每个 alloc/init , retain , 和 copy调用release ,并且不必担心保留计数何时恰好达到零(如果您真的想知道何时发生这种情况,请在 dealloc 中设置断点)。您必须编写不会泄漏或过度释放对象的代码,假设 iOS SDK 也会这样做,并相信您的对象会在正确的时间点被释放。或者,切换到 SDK 版本 5 并改用自动垃圾收集。
  • 关于iphone - 在发布消息后保留 View Controller 的计数不等于零,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8692811/

    相关文章:

    ios - iPhone 7 NSUserDefaults 变成零

    ios - 构建 iOS 网络应用程序(REST 客户端)的最佳架构方法

    ios - 应用程序不断崩溃,由于未捕获的异常而终止应用程序 'NSInvalidArgumentException'

    ios - 核心数据在枚举时发生了变异

    ios - 除非在新行中键入两个或更多字符,否则 UITextView 不会更新框架

    iphone - 在 iPhone 中捕获视频和图像

    iphone - UITextField - 检测内置 iPhone 键盘上的输入?

    iphone - 'NSInvalidArgumentException' : unrecognized selector sent to instance 0x8d25aa0'

    ios - [UIDeviceRGBColor countByEnumeratingWithState :objects:count:]: unrecognized selector sent to instance 0x16577e10 -> A Crash After makeKeyAndVisible

    ios - 带有弹出按钮和详细 View 的 Storyboard Segue