我一直在使用工具来查找未正确释放的分配。我有一个MKMapViewDelegate,在实例化后通过一个实例方法添加地图。我可以看到在ViewDelegate被释放后,这个方法仍然保留着大约300KB的内存。即使我注释掉了代码的主体部分,只剩下这一行代码,它仍然保持着内存:
self.map = [[MKMapView alloc] initWithFrame:CGRectMake(10, 210, 300, 125)];
我查看了对象列表,MKMapView本身没有存活,但是随着我不断创建新的ViewDelegates,内存不断增加。这是地图定义的方式:
@property (strong, nonatomic) MKMapView *map;
地图的委托被设置为nil,同时在ViewDelegate的dealloc中引用也被释放了。
self.map.delegate = nil;
self.map = nil;