【问题标题】:Why retainCount = 2 - after release?为什么retainCount = 2 - 发布后?
【发布时间】:2011-09-10 17:04:22
【问题描述】:

我使用这个代码。

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    // Override point for customization after application launch.

    view = [[UIView alloc] init];

    [_window addSubview:view];

    [view release];

    NSLog(@"count - %d", [view retainCount]);

    [self.window makeKeyAndVisible];

    return YES;

}


- (IBAction)click{

    NSLog(@"count - %d", [view retainCount]); 

}

当我点击 uibutton 时 - 我的视图保留计数 = 2。 为什么会这样?

【问题讨论】:

标签: ios memory-management retaincount


【解决方案1】:

不要指望retainCount。启动仪器,看看是否有泄漏。 Apple 不鼓励将 retainCount 用于调试目的:

重要:这种方法通常是 调试内存没有价值 管理问题。因为任何数 的框架对象可能已保留 一个对象以保存引用 对它,同时 自动释放池可能持有任何 延迟发布的数量 反对,你不太可能 可以从中得到有用的信息 方法。

查看NSObjectProtocol and the retainCount 文档。阅读 Memory Management Programming Guide 以更深入地了解保留计数。

【讨论】:

  • +1。我正在寻找开发者网站的参考资料。谢谢你给了它。
【解决方案2】:

如果我没记错的话,它可能会被_window或其他对象保留,所以如果你在dealloc方法中调用[view retainCount];你可能会得到retain count = 0

正如 Nick Weaver 所说,不要以任何方式使用 retainCount,然后在调试内存问题时检测泄漏。

【讨论】:

    【解决方案3】:

    最好不要介意retainCount的值。 只需遵循内存管理规则 - 在需要时获取所有权,在完成时放弃所有权,您不会有任何问题。

    如果您正在查看retainCount,那么您做事的方式是错误的,您只会让自己感到困惑。

    关于可以保留对象的次数的唯一规则是每次保留都必须与释放保持平衡。

    【讨论】:

      猜你喜欢
      • 2013-02-01
      • 2012-03-05
      • 1970-01-01
      • 2011-01-02
      • 2011-12-20
      • 2013-03-31
      • 2010-11-15
      • 2011-08-08
      • 1970-01-01
      相关资源
      最近更新 更多