Как и мой вопрос «Удаление аннотаций 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, это, вероятно, не нужно для репликации проблемы.
При тестировании этого кода перед публикацией здесь я только заметил, что эта утечка не происходит в тренажере - только на моем телефоне ...
Как насчет кода? Основываясь на вашем собственном ответе на ваш другой вопрос, я думаю, вам следует рассмотреть руководство по управлению памятью для SDK. Я знаю, когда я начал работать на iPhone, я много раз сталкивался с утечками, потому что прошло некоторое время, так как у меня не было сборщика мусора. –
Не требуется код - просто отпустите UISearchBar, а затем MKMapView в представление в IB. Это все, что необходимо для его повторения. Тем не менее, я буду выкапывать версию кода, когда я нахожусь перед моим Mac. – Andiih
код, опубликованный выше. Я также заметил, что эта утечка происходит только на моем устройстве (не в симуляторе). Я еще не обновил версию ОС для iPhone, так что она все еще на 3.0.1. – Andiih