Iphone 管理popover控制器及其内容视图的内存

Iphone 管理popover控制器及其内容视图的内存,iphone,objective-c,cocoa-touch,Iphone,Objective C,Cocoa Touch,当用户点击我的地图视图的pin标注上的右侧标注附件时,我显示的是一个带有视图的popovercontroller。为此,我在mapcontroller中维护2个保留属性。我还在mapcontroller的dealoc中发布这些属性——这可能永远不会发生 当用户取消选择注释视图“我希望释放所有内存”时,分配nil是否足够 - (void)mapView:(MKMapView *)mapView didDeselectAnnotationView:(MKAnnotationView *)view {

当用户点击我的地图视图的pin标注上的右侧标注附件时,我显示的是一个带有视图的popovercontroller。为此,我在mapcontroller中维护2个保留属性。我还在mapcontroller的dealoc中发布这些属性——这可能永远不会发生

当用户取消选择注释视图“我希望释放所有内存”时,分配nil是否足够

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

是的,应该是这样。这会将对象的引用设置为nil,从而释放对象。不过,我不是内存管理专家,所以如果有人想否决/纠正我,请放心

我相信您还需要释放这些对象

赋值为nil不只是删除内存中对象的指针吗?我怀疑该对象仍将驻留在内存中,并且仍有一个retain计数器分配给它,因此在其retain计数减少之前,它不会从内存中删除

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

我不是100%确定,但是。。。这里还有一个链接

另外,对于将来,如果您想确定,您可以使用Leaks performance tool运行应用程序,它应该向您显示泄漏内存的位置以及当前在内存中分配了哪些对象,等等


我可以尝试在测试项目中快速设置场景,并使用泄漏进行监控,稍后还可以更新我的答案。

如果属性声明为
retain
,并使用默认的合成访问器,那么通过该访问器将其值设置为
nil
(“.”语法)也会释放它。啊,好的。很高兴知道。“popovercontroller=nil”部分如何;它没有使用访问器方法-这会导致问题吗?