这段代码为什么会产生内存泄漏?
问题描述:
Xcode中的泄漏工具在这里显示了内存泄漏。我已经评论了Leaks抱怨的受影响行。但我看到我的内存管理没有错误...这段代码为什么会产生内存泄漏?
- (void)setupViewController {
MyViewController *myVC = [[MyViewController alloc] init];
UITabBarItem *tbi = [[UITabBarItem alloc] initWithTabBarSystemItem:UITabBarSystemItemDownloads tag:1];
myVC.tabBarItem = tbi; // LEAK: 128 bytes
self.myViewController = myVC;
[myVC release];
[tbi release];
}
我的意思是... tbi和myVC是在最后发布,并且alloc是平衡的。那么,怎么了?我不明白。
答
如果MyVc.tabBarItem已经设置,无论它的指向可能无法正确释放,从而导致泄漏。
答
它只是表明,下列语句中至少有一个为真:
- 仪器是不完美的,有时可见那里并没有任何(反之亦然)泄漏。
- 苹果的代码不是没有错误的。
其实,无论是真实的。
myVC的tabbar属性应该是一个定义要保留的属性。如果这样做,分配给该属性的对象的保留将自动保留。 – TechZen 2010-02-15 20:57:55
好了,但tabBarItem是来自Apple,而不是我;-)我没有为我的View Controller创建任何tabBarItem属性。 Apple做到了。如果我手动发布myVC.tabBarItem是因为Apple已经忘记这么做,是不是会违反内存管理规则? – dontWatchMyProfile 2010-02-15 21:40:53
'tabBarItem'是具有'retain'语义的属性。二传手的泄漏不太可能。 – 2010-07-10 13:54:17