我一直在使用工具来查找未正确发布的分配。我有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;
答案 0 :(得分:1)
将委托设置为nil后,就不再有任何指针,iOS会在需要时释放它。将其设置为nil后,iOS可能无法立即释放内存。
请记住,您通过将指针设置为nil来移除它,但是对象仍然保留在堆上,基本上什么都不做,直到在那里分配了其他内容。
(我假设您还使用[self.map removeFromSuperView]
从其超级视图中删除了MKMapView。)