2009-09-03 2 views
1

Как и мой вопрос «Удаление аннотаций MKMapView вызывает утечки». Я обнаружил, что если вы создаете проект на основе представления, добавьте UISearchBar и MKMapView в NIB представления, подключите делегатов (я не создаю никаких методов, поскольку нам фактически не нужно ничего делать, чтобы вызвать утечки) ссылку в MapKit и запустить проект, тогда просто щелчок в UISearchBar вызывает утечку 1k +. Этого не происходит, если у вас нет UISearchBar и MKMapView в представлении. У меня такие же проблемы при создании представлений из кода. Я думал, что NIB может вести себя по-другому, но это не так.Is MKMapView leaky

Является ли MKMapView проблематичным, или я делаю что-то неправильно.

Чтобы воспроизвести проблему с кодом попробовать код ниже - я создал новый "вид приложения на базе" проект

TestMapViewFromCodeViewController.h

 
#import <UIKit/UIKit.h> 
#import <MapKit/MapKit.h> 

@interface TestMapViewFromCodeViewController : UIViewController { 
    UISearchBar *searchBar; 
    MKMapView *mapView; 

} 

@property (nonatomic, retain) MKMapView *mapView; 
@property (nonatomic, retain) UISearchBar *searchBar; 


@end 

TestMapViewFromCodeViewController.m

 

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    UISearchBar * tmpSearchBar = [[UISearchBar alloc] initWithFrame:CGRectMake(0.0,0.0,self.view.frame.size.width,40.0)]; 
    [self.view addSubview:tmpSearchBar]; 
    [self setSearchBar:tmpSearchBar]; 
    [tmpSearchBar release]; 

    MKMapView *tmpMapView=[[MKMapView alloc] initWithFrame:CGRectMake(0.0,0.0,self.view.frame.size.width,self.view.frame.size.height)]; 
    tmpMapView.showsUserLocation=FALSE; 
    [self.view insertSubview:tmpMapView atIndex:0]; 
    [self setMapView:tmpMapView]; 
    [tmpMapView release]; 
} 


- (void)dealloc { 
    [mapView release]; 
    [searchBar release]; 
    [super dealloc]; 
} 

Хотя я сохранил s ubviews с mapView и searchBar, это, вероятно, не нужно для репликации проблемы.

При тестировании этого кода перед публикацией здесь я только заметил, что эта утечка не происходит в тренажере - только на моем телефоне ...

+1

Как насчет кода? Основываясь на вашем собственном ответе на ваш другой вопрос, я думаю, вам следует рассмотреть руководство по управлению памятью для SDK. Я знаю, когда я начал работать на iPhone, я много раз сталкивался с утечками, потому что прошло некоторое время, так как у меня не было сборщика мусора. –

+0

Не требуется код - просто отпустите UISearchBar, а затем MKMapView в представление в IB. Это все, что необходимо для его повторения. Тем не менее, я буду выкапывать версию кода, когда я нахожусь перед моим Mac. – Andiih

+0

код, опубликованный выше. Я также заметил, что эта утечка происходит только на моем устройстве (не в симуляторе). Я еще не обновил версию ОС для iPhone, так что она все еще на 3.0.1. – Andiih

ответ

2

Да.

Известны утечки в MKMapViews 3.0. Утечка происходит, когда вы освобождаете MKMapView. Это исправлено в последующих выпусках. Обходной путь состоит в том, чтобы иметь один MKMapView и повторно использовать его.

https://devforums.apple.com/message/129740#129740

 Смежные вопросы

  • Нет связанных вопросов^_^