Предупреждение о получении памяти при загрузке MapView

Я работаю над проектом, в котором у меня есть ViewController с MapView в нем.

Теперь эта страница загружается и закрывается несколько раз.

Сначала я добавил MapView в xib, а затем каждый раз, когда эта страница загружалась, количество живых укусов увеличивалось на 10 МБ.

Solution1

Затем, после исследования этой проблемы, я обнаружил, что нужно использовать один объект для MKMapView, определить его в AppDelegate и использовать его постоянно.

Я попробовал это, и это до некоторой степени уменьшило использование памяти, но опять же через некоторое время приложение зависло из-за предупреждения о получении памяти.

Теперь, если я снова запускаю приложение после сбоя, то при первом открытии страницы MapView оно обычно вылетало, в это время количество активных укусов составляло всего 11 МБ.

Это код для добавления вида карты в AppDelegate

 mapView=[[MKMapView alloc]initWithFrame:CGRectMake(0, 0, 300, 450)]; 

[self.window addSubview:mapView]; 

mapView.delegate=self; 

mapView.hidden=YES;

Это был код, который я использовал для загрузки Mapview.

- (void)viewDidLoad
{
    [super viewDidLoad];

    latittude=[[[NSUserDefaults standardUserDefaults]valueForKey:@"LATITUDE"] floatValue];
    longitude=[[[NSUserDefaults standardUserDefaults] valueForKey:@"LONGITUDE"] floatValue];

    APPDELEGATE.mapView.frame=CGRectMake(0, 140, 320, 290);

}

-(void)viewDidAppear:(BOOL)animated
{
    APPDELEGATE.mapView.hidden=NO;

    CLLocationCoordinate2D location;
    location.latitude  = latittude;
    location.longitude = longitude;

    Annotation *a;
    a=[[Annotation alloc]initWithCoordinate:location];
    [APPDELEGATE.mapView addAnnotation:a ];
}

-(void)viewWillDisappear:(BOOL)animated
{
    APPDELEGATE.mapView.hidden=YES;
}   

Solution2

Вторым решением, которое я нашел, было изменение типа MapView, когда вид исчезает.

Поэтому я изменил его тип, изменил его делегат на ноль и удалил из суперпредставления на ViewWillDisappear.

Даже это не имело никакого значения.

Любая идея, как я могу преодолеть эту проблему?

Спасибо

1 ответ

Хранение MapView в приложении-делегате кажется странным решением. Я бы вернулся к тому, чтобы он содержался в одном контроллере, как вы делали изначально.

Сначала я добавил MapView в xib, а затем каждый раз, когда эта страница загружалась, количество живых укусов увеличивалось на 10 МБ.

Это ваша проблема, и она выглядит как утечка памяти. Размер приложения не должен увеличиваться, если вы правильно обрабатываете свои объекты / память. Убедитесь, что вы используете дугу, и проверьте, что вы устанавливаете все необходимые объекты (например, NSTimers, NSNotifications) в ноль в методе viewWillDisappear.

Другие вопросы по тегам