Как я могу решить Завершение из-за ошибки памяти

Я использую MKMapView в своем большом проекте. когда я загружаю много аннотации (более 700), и я рисую линию между этими точками на MapKit, я получаю сообщение об ошибке xcode «Прекращено из-за ошибки памяти», и приложение сбой. вы можете увидеть на изображении:

введите описание изображения здесь ,

Я добавляю строку следующим образом:

введите описание изображения здесь

если у меня меньше 700 аннотаций, он работает очень хорошо. Я думаю, что у него проблема с памятью. Как я могу решить эту проблему?

// adding annodation for (int i=0; i<[fetcher.locations count]; i++)//fetcher.locations is NSMutableArray and inside have locationInfoClass objects . locationInfoClass is hold CLLocationCoordinate2D. { locationInfoClass * loc=[fetcher2.locations objectAtIndex:i]; CLLocationCoordinate2D coordinate1; coordinate1.latitude = loc.lat; coordinate1.longitude = loc.lon; myAnnotation * ann = [[myAnnotation alloc] initWithCoordinate:annCoordinate title:@"uniqtitle" subtitle:@"uniqsubtitle"]; [mapView addAnnotation:ann]; } #pragma mark - #pragma mark -mapview overlay CLLocationCoordinate2D *coordinates = malloc(sizeof(CLLocationCoordinate2D) * [mapView.annotations count]); for (int i=0; i<[mapView.annotations count]; i++) { myAnnotation * ann=[mapView.annotations objectAtIndex:i]; coordinates[i]=ann.coordinate; } self.routeLine = [MKPolyline polylineWithCoordinates:coordinates count:mapView.annotations.count]; // pinlerin sayısı ne kadarsa o kadar çizgi çiziyor. free(coordinates); [self.mapView setVisibleMapRect:[self.routeLine boundingMapRect]]; //If you want the route to be visible dispatch_async(dispatch_get_main_queue(), ^{ [self.mapView addOverlay:self.routeLine]; }); 

.h файл имеют

 @property (nonatomic, retain) MKPolyline *routeLine; //your line @property (nonatomic, retain) MKPolylineView *routeLineView; //overlay view 

Методы делегирования MKMapView.

 -(MKOverlayView *)mapView:(MKMapView *)mapView viewForOverlay:(id<MKOverlay>)overlay { if(overlay == self.routeLine) { if(nil == self.routeLineView) { self.routeLineView = [[MKPolylineView alloc] initWithPolyline:self.routeLine]; self.routeLineView.fillColor = [UIColor redColor]; self.routeLineView.strokeColor = [UIColor redColor]; self.routeLineView.lineWidth = 3; } return self.routeLineView; } return nil; } /* - (void)mapView:(MKMapView *)mv didAddAnnotationViews:(NSArray *)views { MKAnnotationView *annotationView = [views objectAtIndex:0]; id <MKAnnotation> mp = [annotationView annotation]; MKCoordinateRegion region = MKCoordinateRegionMakeWithDistance([mp coordinate], 1500, 1500); [mv setRegion:region animated:YES]; }*/ - (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation { MKAnnotationView *pinView = nil; if(annotation != mapView.userLocation) { static NSString *defaultPinID = @"ftffggf"; pinView = (MKAnnotationView *)[self.mapView dequeueReusableAnnotationViewWithIdentifier:defaultPinID]; if ( pinView == nil ) pinView = [[MKAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:defaultPinID]; //pinView.pinColor = MKPinAnnotationColorGreen; pinView.canShowCallout = YES; //pinView.animatesDrop = YES; UIImage * image=[UIImage imageNamed:@"pin.png"]; CGSize size=CGSizeMake(50, 63);//set the width and height pinView.image = image } else { [self.mapView.userLocation setTitle:@"I am here"]; } pinView.centerOffset = CGPointMake(0,-23); return pinView; } 

One Solution collect form web for “Как я могу решить Завершение из-за ошибки памяти”

В последнее время – и с увеличением частоты – я видел одно и то же сообщение об ошибке («Прекращено из-за ошибки памяти») каждый раз, когда я запускал проект из XCode, после почти одной минуты времени выполнения, даже если я не касаюсь приложения после его начала.

Я не видел:

  • Любое удивительное потребление памяти при запуске с профилировщиком.
  • Любые очевидные шаблоны, когда приложение прекращается (кроме периода времени, которое потребовалось, но это заняло некоторое время, чтобы распознать).
  • Любые сообщения об ошибке «Завершение приложения из-за неперехваченного исключения» или трассировки стека в консоли.
  • Любые исключения (исключение: исключение: all; break: on throw).
  • Любые объекты зомби.

Кроме того, я видел, что приложение неожиданно появляется, когда приложение запускается при отладке – случайно не прыгнув обратно в Springboard, если я снова запустил приложение с устройства сразу после его завершения.

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

Затем у меня был момент и заметил два предупреждения о памяти на консоли, хотя профилировщик не обнаружил проблем с памятью.

Zombies. Когда я выключил объекты Zombie, предупреждения о памяти исчезли, и приложение больше не было спонтанно прекращено.

Редактировать:

10 месяцев спустя я обнаружил другую ситуацию, когда это может произойти. Оказалось, бесконечный цикл while также может сделать это:

 while (result==nil) { result = [collectionView indexPathForItemAtPoint:testPoint]; testPoint = nextTestPoint(); // After about 12 seconds, at which point this is several tens of thousands of pixels off the edge of the screen, the app dies from "Memory error" } 
  • Как заставить Xcode автоматически соответствовать протоколу
  • Инструмент не запускает скрипт GUI-теста в реальном устройстве iOS из Xcode 4.4
  • Раскадровка и автоспуск: как сделать круговое изображение
  • iOS 8 Xcode 6.1 EXC_BREAKPOINT (SIGTRAP) только в комплекте приложения
  • Xcode был разбит после добавления ART.xcodeproj в библиотеку
  • Понимание поведения внутри блока GCD
  • Xcode 7.3 не может создавать xib для UIView / UITableViewCelltogether
  • Получение SIGABRT в пользовательском uiview с использованием xib в Xcode 6 с использованием Swift
  • Клавиатура не работает должным образом в ios7 (Xcode 6)
  • Xcode 4 - мое приложение установлено, но никогда не запускается на устройстве
  • Сборка встроенных фреймворков Swift при архивации
  • Interesting Posts
    PhoneC: Разработка iOS проста с помощью XCode, Swift3, UITableView, cocatouch, давайте создадим приложения для iPhone, iPad и Macbook.