我在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
甚至从未插入视图中。当我评论该单行时,泄漏消失。