программирование iPhone: странная ошибка при использовании MKMapView - PullRequest
8 голосов
/ 14 июля 2010

Я работаю над приложением для iPhone, и иногда получаю странный журнал, когда манипулирую картой:

ImageIO_Free: ptr 0xdf0f000 got double released??? (16384 bytes)

Если я продолжу играть, приложение вылетитЯ погуглил, но ничего интересного не нашел ... Странно!

Ответы [ 5 ]

4 голосов
/ 13 августа 2010

На форумах разработчиков Apple есть одна тема, которая проливает немного света на это: " Сбой, связанный с набором карт? "

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

Вам следует сообщить об ошибке в Apple.

1 голос
/ 14 июля 2010

Без моего хрустального шара я могу только догадываться, но вы, вероятно, release d что-то вручную, уже помеченное для autorelease.

Прочитайте Руководство по программированию управления памятью , особенно Правила управления памятью !Дважды.

0 голосов
/ 28 сентября 2010

Это только что случилось со мной, и я верю, что у меня есть ответ.

Проблема, похоже, заключается в добавлении аннотаций к виду карты. Кажется, что когда вы вызываете addAnnotations для экземпляра MKMapView, объект MKMapView не сохраняет эти объекты. Поэтому после того, как вы поэкспериментируете с картой и переместите аннотации в и из поля зрения, когда придет время перерисовать аннотации, память будет освобождена, и вы получите ошибку EXC_BAD_ACCESS.

Чтобы решить эту проблему, просто оставьте объекты для добавления в качестве аннотаций. Это может быть достигнуто наличием переменной экземпляра NSMutableArray текущих аннотаций карт. Каждый раз, когда вы вызываете addAnnotations, также добавляйте эти объекты в этот сохраненный массив, и все должно быть готово.

В вашем .h файле:

@interface MapViewController : TTModelViewController <MKMapViewDelegate, UIAlertViewDelegate> {
  NSMutableArray *feeds;
}
@property (nonatomic, retain) NSMutableArray *feeds;

В вашем файле .m:

@synthesize feeds;
// (release feeds in your dealloc)

А когда вы добавляете аннотации, делайте что-то вроде этого:

if (self.feeds == nil) {
  self.feeds = [NSMutableArray array];
}
[self.feeds addObjectsFromArray:newPois]; // newPois is an array of annotations
[mapView addAnnotations:newPois];

Работаю для меня до сих пор. Буду обновлять, если все изменится. Если вы удалите объекты из вида карты, вы, вероятно, также захотите синхронизировать этот массив каналов, чтобы избежать «мертвой памяти».

0 голосов
/ 28 июля 2010

У меня тоже есть эта проблема случайно ...

ImageIO_Free: ptr 0xd700000 был выпущен дважды ??? (16384 байта) хеш: 0

Не знаю, как исправить. Кажется, проблема с фреймворком.

0 голосов
/ 14 июля 2010

Скорее всего, предупреждение о том, что один и тот же объект отправил объект ImageIO_Free еще на одну версию, чем отправил явное или неявное сохранение.ImageIO_Free более выпущен и впоследствии неожиданно умирает, вызывая сбой.

...