MKMapView initWithFrame不使用ARC释放内存

spe*_*dly 5 iphone memory-leaks mkmapview ios automatic-ref-counting

我一直在使用工具来查找未正确发布的分配.我有MKMapViewDelegate,它在实例化后通过实例方法添加地图.我可以在调用树中看到,在释放ViewDelegate之后,此方法保留了大约300KB的内存.我评论了代码的内容,它仍然只用这一行维护内存:

self.map = [[MKMapView alloc] initWithFrame:CGRectMake(10, 210, 300, 125)];
Run Code Online (Sandbox Code Playgroud)

我查看对象列表并且MKMapView本身不存在,但随着我不断创建新的ViewDelegates,该内存不断增加.以下是地图的定义方式:

@property (strong, nonatomic)        MKMapView *map;
Run Code Online (Sandbox Code Playgroud)

地图的委托设置为nil,以及ViewDelegate的dealloc上的引用

self.map.delegate = nil;
self.map = nil;
Run Code Online (Sandbox Code Playgroud)

Aar*_*ger 1

一旦你将 delegate 设置为 nil,就不再有任何指针,iOS 会在需要的时候释放它。iOS 在设置为 nil 后可能不会立即释放内存。

请记住,您通过将指针设置为 nil 来删除该指针,但该对象仍然保留在堆上,基本上什么也不做,直到那里分配了其他东西。

(我假设您还使用从其超级视图中删除了 MKMapView [self.map removeFromSuperView])。