我删除了所有注释,并在dealloc时禁用了用户位置.这种堆增长的原因是什么?
将VC2推送到导航堆栈的VC1代码:
- (NSIndexPath *)tableVIEw:(UItableVIEw *)tableVIEw willSelectRowAtIndexPath:(NSIndexPath *)indexPath { VC2 *vc2 = [[VC2 alloc] init]; vc2.index = indexPath.row; [[NSNotificationCenter defaultCenter] removeObserver:self]; [[self navigationController] pushVIEwController:vc2 animated:YES]; [vc2 release]; vc2 = nil; return nil;}
VC2中的dealloc代码:
- (voID)dealloc {//Other UILabel,UITextFIEld objects dealloc methods go here//The next four lines of code do not make a difference even if they are in vIEwWilldisappear[self.mapVIEw removeAnnotations:self.mapVIEw.annotations];[self.mapVIEw.layer removeAllAnimations];self.mapVIEw.showsUserLocation = NO;//This line does not make a difference in heapshotmapVIEw.delegate = nil;[mapVIEw release];mapVIEw = nil;[super dealloc];
}
此外,如果我不打开用户位置,则没有堆增长.
更新:我已经在模拟器和iPad 3G WiFi上对此进行了测试,我发现这两种情况下的堆增长.
解决方法 如果要在IB中创建MKMapVIEw,则应该在-viewDidUnload
AND -dealloc中释放/取消它. 如果不这样做,如果在视图控制器的生命周期内卸载/重新加载视图,则所有视图元素(无论如何都设置为保留属性)将在重新加载时泄漏.
在网络/ SO上似乎有相当数量的喋喋不休,说这是5.0.0之前的API错误.您要构建哪个版本的SDK?
此外,在黑暗中拍摄:只尝试
self.mapVIEw.showsUserLocation = NO;
要么
self.mapVIEw.showsUserLocation = NO;[self.mapVIEw.layer removeAllAnimations];[self.mapVIEw removeAnnotations:self.mapVIEw.annotations];
而不是你现在使用的这些命令的顺序.
可能是你在MKMapVIEw有机会正确拆除它之前删除MKUserLocation的注释?
总结以上是内存溢出为你收集整理的ios – MKMapView没有为MKUserLocation释放内存全部内容,希望文章能够帮你解决ios – MKMapView没有为MKUserLocation释放内存所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)