为什么MKMapView在其父控制器弹出导航堆栈后仍被保留?

时间:2012-11-27 06:16:12

标签: iphone ios mkmapview automatic-ref-counting instruments

我在SO和其他地方找到了一些与此有关的问题,但没有一个有明确的答案。据我所知,使用ARC时,我的MKMapView在释放包含它的视图控制器时不会被释放(或者至少在堆上留下垃圾)。

认为这对我来说是一个愚蠢的问题 - 我花了很多时间倾注我的代码,一次测试一小部分,花费无数的快照,确保mapView的委托被设置为nil等,最后,这个简单的行:

self.mapView = [[MKMapView alloc] initWithFrame:CGRectMake(20, 3, 154, 171)];
每次进出mapView所在的视图控制器时,

都会分配大约200 KB的内存。

所以,我的问题是:任何人都可以解释这里发生了什么吗?有没有理由说ARC没有释放我的MKMapView占用的内存?这是一个已知的问题?它对我来说看起来很像一个保留周期,而且相当多的记忆正在丢失,但在我看来,这必须是幕后发生的......

修改

以下是我mapView的声明:

@property (nonatomic, retain) MKMapView *mapView;

请记住,我对此MKMapView所做的唯一事情是alloc和init,如我原始问题的行中所示(当然我想用这个地图视图做更多的事情) ,但我把它缩小到这条线是导致泄漏的唯一部分 - mapView甚至从未插入视图中。当我评论该单行时,泄漏消失。

0 个答案:

没有答案