0

我使用此代码。

- (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。为什么会发生这种情况?

4

3 回答 3

6

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

重要提示:此方法在调试内存管理问题时通常没有价值。因为任何数量的框架对象可能已经保留了一个对象以保存对它的引用,而同时自动释放池可能在一个对象上保存了任何数量的延迟释放,所以您不太可能从中获得有用的信息方法。

查看NSObjectProtocol 和 retainCount文档。阅读内存管理编程指南以更深入地了解保留计数。

于 2011-06-08T09:09:57.350 回答
1

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

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

于 2011-06-08T09:11:02.143 回答
0

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

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

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

于 2011-06-08T09:14:05.037 回答