MKMapView Утечка памяти в приложении iPhone - PullRequest
3 голосов
/ 21 января 2010

Я работаю над приложением для iPhone, которое использует MKMapView и показывает местоположение пользователя.Я получаю утечки памяти при утечке объекта размером NSCFArray размером 128 байт, GeneralBlock-16, GenralBlock-8, когда для свойства MKMapView showUserLocation установлено значение TRUE.Если установлено как НЕТ, то я не получаю эту утечку.Может кто-нибудь подсказать, что может быть возможной причиной этого.Это ошибка в классе MKMapView или я неправильно использую MKMapView.Может кто-нибудь сказать мне, как лучше всего использовать MKMapView и показать userLocatio n также.

Спасибо и привет, Приянка Аггарвал

Ответы [ 3 ]

2 голосов
/ 08 марта 2010

У меня точно такая же проблема. Это похоже на ошибку в MKMapView для меня. На ум приходят три обходных пути:

  1. Создайте собственную аннотацию для текущей позиции.
  2. Не разрушайте и не воссоздайте вид, чтобы получить утечку только один раз.
  3. Выключи.

К счастью для меня, я могу отключить его без какой-либо существенной потери функции.

0 голосов
0 голосов
/ 11 марта 2010

Я исправил подобную проблему, автоматически выпуская мои объекты annotationView. Кроме того, MKUserLocation является объектом аннотации, поэтому проверка ваших собственных объектов аннотации (или проверка, чтобы увидеть, является ли объект аннотации MKUserLocation), и возврат nil для других объектов аннотации (или MKUserLocation) сообщит картографическому комплекту использовать объект 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

...