为什么retainCount = 2 - 发布后?

时间:2011-06-08 09:02:45

标签: ios memory-management retaincount

我使用此代码。

- (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时 - 我的视图保留count = 2。 为什么会这样?

3 个答案:

答案 0 :(得分:6)

不要依靠retainCount。启动仪器并查看是否有泄漏。 Apple不鼓励使用retainCount进行调试:

  

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

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

答案 1 :(得分:1)

如果我没有记错,可以由_window或其他对象保留,因此如果您使用[view retainCount];方法拨打dealloc,您可能会获得retain count = 0

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

答案 2 :(得分:0)

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

如果您正在查看retainCount,那么您会以错误的方式处理事情,而您只会让自己感到困惑。

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