iPhone应用程序中的MKMapView内存泄漏

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了iPhone应用程序中的MKMapView内存泄漏相关的知识,希望对你有一定的参考价值。

我正在开发一个使用MKMapView并显示用户位置的iPhone应用程序。我得到的内存泄漏泄漏对象是大小为128字节的NSCFArray,GeneralBlock-16,GenralBlock-8,当时将MKMapView的showUserLocation属性设置为TRUE。如果设置为NO,那么我不会得到这个泄漏。任何人都可以建议可能的原因是什么。这是MKMapView类中的错误还是我错误地使用MKMapView。有人能告诉我使用MKMapView和展示userLocation的最佳方法是什么。

感谢和问候,Priyanka Aggarwal

答案

我有完全相同的问题。对我来说,它看起来像MKMapView中的一个错误。我想到了三种解决方法:

  1. 为当前位置创建自己的注释。
  2. 不要破坏并重新创建视图,这样您只能获得一次泄漏。
  3. 把它关掉。

对我来说幸运的是,我可以在没有任何重大功能损失的情况下关闭它。

另一答案

我通过自动释放我的annotationView对象修复了类似的问题。此外,MKUserLocation是一个注释对象,因此检查您自己的注释对象(或检查注释对象是否为MKUserLocation),并为其他注释对象(或MKUserLocation)返回nil将告诉map kit使用默认的MKUserLocation对象。将这些检查放到位可以阻止您的泄漏。见下文:

- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation
{ static NSString *placemarkIdentifier = @"placemark_identifier";
    if ([annotation isKindOfClass:[MyPlaceMark class]]) {
        MKAnnotationView *annotationView = [mapView dequeueReusableAnnotationViewWithIdentifier:placemarkIdentifier];
        if (annotationView == nil) {
            annotationView = [[[MyPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:placemarkIdentifier] autorelease];
        } else {
            annotationView.annotation = annotation;
        }
        return annotationView;
    }
    return nil;
}

MKUserLocation class reference

另一答案

值得一提的是,这里有类似的相关问题:

以上是关于iPhone应用程序中的MKMapView内存泄漏的主要内容,如果未能解决你的问题,请参考以下文章

MKMapView 在 iOS10 中检测内存泄漏

如何解决 xcode(仪器)中的 iPhone 应用程序内存泄漏

iPad 和 iPhone 应用程序中的内存泄漏

如何检测 iPhone 应用程序中的内存泄漏/电池耗尽

iPhone 应用程序内存泄漏与 NSMutableArray 中的 UIImages

iphone App中的内存泄漏