我正在尝试检查并修复我的代码/项目中的所有泄漏。我正在使用两个ViewControllers(A,B)。“一个”viewController对象始终在内存中可用我没有破坏它。在app用户中可以从A切换到B,反之亦然。当用户切换到“A”控制器时,B对象会创建并销毁。当破坏“B”时,我观察到泄漏,如下图所示
问题:在上面的图片中,我们可以看到所有堆栈跟踪看起来都是禁用的甲酸盐(不像普通的类方法指示),所以任何人都可以提供一些关于这些泄漏可能是什么的线索?如果有任何解决方案可以解决这些类型的泄漏?提前谢谢。
我的B类创作:
B *kbViewer = [[B alloc] initWithNibName:nil bundle:nil];
kbViewer.kbDataSource=nil;
kbViewer.kbDataSource=[kbi getBookDataSource];
kbViewer.path = selectedPath;
[self.navigationController pushViewController:kbViewer animated:NO];
[kbViewer release];
在B类中有方法,因为我弹出了viewcontroller
-(IBACtion)bookShelfActionSelected{
[self.navigationController popViewControllerAnimated:NO];
}
之后我的B级dealloc被解雇了。
-(void)dealloc{
//here other than IBOutlets all the components/objects I am relesing
//more over i am not releasing anywhere my IBOutlets
}
答案 0 :(得分:0)
添加autorelease只是将对象的所有权委托给自动释放池。如果只有全局自动释放池,这是一种内存泄漏。 (你继续分配内存)。
创建B控制器的代码是正确的。从图片中我看不到B对象泄漏。也许问题是B如何分配一些对象?
BTW:ARC简化了内存管理,但它不是垃圾收集器,所以你需要知道你在做什么!