为什么retainCount = 2 – 发布后?
我使用这个代码。
- (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。为什么发生这种情况?
请不要指望retainCount。 起火仪器,看看是否有泄漏。 苹果不鼓励使用retainCount来进行debugging:
重要提示 :在debugging内存pipe理问题时,此方法通常没有任何价值。 因为任何数量的框架对象可能保留了一个对象来保存对它的引用,同时autorelease池可能在对象上保存了任意数量的延迟发布,所以很难从这个对象获得有用的信息方法。
看看NSObjectProtocol和retainCount文档。 阅读“ 内存pipe理编程指南 ”以更深入地了解保留计数。
如果我没有弄错,可以通过_window
或其他对象保留,所以如果你调用[view retainCount];
在dealloc
方法中,你可能会得到retain count = 0
。
正如Nick Weaver所说,不要以任何方式使用retainCount
,然后在debugging内存问题时检测泄漏。
最好不要介意retainCount的价值。 只需遵循内存pipe理规则 – 在需要时获得所有权,在完成时放弃所有权,并且不会有问题。
如果你正在寻找retainCount,那么你正在以错误的方式去做事,而你只会迷惑自己。
关于您可以保留一个对象的次数的唯一规则是每个保留必须与一个版本保持平衡。