我使用此代码。
- (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。 为什么会这样?
答案 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,那么您会以错误的方式处理事情,而您只会让自己感到困惑。
关于保留对象的次数的唯一规则是每个保留必须与释放保持平衡。