【问题标题】:MKMapView Memory Leak in iPhone ApplicationiPhone 应用程序中的 MKMapView 内存泄漏
【发布时间】:2011-01-07 18:45:28
【问题描述】:

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

感谢和问候, 普里扬卡·阿加瓦尔

【问题讨论】:

    标签: iphone memory-leaks


    【解决方案1】:

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

    1. 为当前位置创建自己的注释。
    2. 不要破坏并重新创建视图,这样您只会得到一次泄漏。
    3. 将其关闭。

    对我来说幸运的是,我可以将其关闭而不会造成任何重大功能损失。

    【讨论】:

      【解决方案2】:

      我通过自动释放我的 annotationView 对象解决了类似的问题。此外,MKUserLocation 是一个注释对象,因此检查您自己的注释对象(或检查注释对象是否为 MKUserLocation),并为其他注释对象(或 MKUserLocation)返回 nil 将告诉地图工具包使用默认的 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

      【讨论】:

        【解决方案3】:
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-01-05
        • 1970-01-01
        • 2014-02-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多