我在 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
甚至从未插入到视图中)。当我注释掉那条线时,泄漏就消失了。