管理弹出控制器及其内容视图的内存

时间:2011-01-26 11:13:29

标签: iphone objective-c cocoa-touch

当用户在我的地图视图的针脚标注上点击右侧标注附件时,我正在显示一个内部有视图的popovercontroller。我在mapcontroller中维护了2个保留属性。我也在mapcontroller的dealloc中发布这些属性 - 这可能永远不会发生。

当用户取消选择注释视图时,我想释放所有这些内存,确定分配nil就足够了吗?

- (void)mapView:(MKMapView *)mapView didDeselectAnnotationView:(MKAnnotationView *)view
{
    [self.informationViewController.view removeFromSuperview]; //remove from popovercontroller
    self.informationViewController = nil; 
    popoverController = nil;
}

2 个答案:

答案 0 :(得分:0)

是的,它应该。这会将对象的引用设置为nil,而nil又会释放对象。我不是内存管理方面的专家,所以如果有人想要对我进行低估/纠正,请随意。

答案 1 :(得分:0)

我相信你也需要释放这些物品。

不只是分配nil只删除指向内存中对象的指针吗?我怀疑该对象仍然驻留在内存中并且仍然分配了一个保留计数器,因此在保留计数减少之前它不会从内存中删除。

此外,通过在释放对象之前将指针指定为nil,我也会怀疑您是否会创建内存泄漏,因为尝试在控制器的dealloc中调用release将不会实际释放该对象。

我对此并不是100%肯定,但是......这里也是Memory Management Programming Guide的链接。

此外,对于未来,如果您想确定,您可以使用Leaks性能工具运行您的应用程序,它应该显示您泄漏内存的位置以及当前在内存中分配的对象等等...

我可以尝试快速设置测试项目中的场景并使用Leaks监视它并稍后更新我的答案。