So Instruments告诉我,这个方法有三个内存泄漏(具体来说,它指出了这一行: [self.view addSubview:menuBar.view];
我看不到泄漏,我绞尽脑汁。我保持对menuBar对象的引用并释放它。谁比我更聪明,可以解释一下?在我的XIB中有三个菜单栏物品并且我有三个泄漏是巧合吗?
以下是整个方法:
// root vc调用切换屏幕上菜单栏的显示状态
-(IBAction) showToolBar {
//if no toolbar exists, create one and add it to the view
if (!menuBarView) {
MenuBarViewController *menuBar = [[MenuBarViewController alloc] initWithNibName:@"MenuBarViewController" bundle:nil];
menuBar.book = self.selectedTitleDeck;
menuBar.booksArray = self.allTitleDeck;
self.menuBarView = menuBar;
[self.view addSubview:menuBar.view];
[menuBar release];
}
CGRect frame = menuBarView.view.frame;
[UIView beginAnimations:nil context:NULL];
if (self.toolBarIsDisplayed == NO) {
//show the toolbar
frame.origin.y = 725;
self.toolBarIsDisplayed = YES;
} else if (self.toolBarIsDisplayed == YES) {
//hide the toolbar
frame.origin.y = 788;
self.toolBarIsDisplayed = NO;
}
self.menuBarView.view.frame = frame;
[UIView commitAnimations];
}
答案 0 :(得分:1)
addSubview:保留传递给它的视图(参见reference)。调用addSubView后,您可以释放该视图,例如:
MenuBarViewController *menuBar = [[MenuBarViewController alloc] initWithNibName:@"MenuBarViewController" bundle:nil];
menuBar.book = self.selectedTitleDeck;
menuBar.booksArray = self.allTitleDeck;
self.menuBarView = menuBar;
[self.view addSubview:menuBar.view];
[menuBar.view release];
[menuBar release];
}
答案 1 :(得分:0)
告诉我们MenuBarViewController的dealloc方法会发生什么。我怀疑你忘记发布它的实例变量。
答案 2 :(得分:0)
根据我的问题的评论中的建议,问题不在于代码,而是在模拟器中运行我的应用程序并尝试检测内存泄漏。
当针对设备上的代码运行Instruments时,不会报告任何泄漏。
我的安慰奖是对两天试图找到不存在的漏洞时出土的记忆管理的更深刻理解。
感谢所有人的建议,非常感谢。