2010-07-14 7 views
8

Estoy trabajando en una aplicación para iPhone, y tengo esta extraña registro veces al manipular un mapa:iPhone de programación: error raro usando un MKMapView

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

Si countinue jugando, la aplicación se estrellaría. Lo busqué en Google, pero no he encontrado nada interesante ... ¡Qué raro!

Respuesta

0

Es muy probable que sea una advertencia de que el mismo objeto ha enviado el objeto ImageIO_Free una versión más de la que envió un retener explícito o implícito. ImageIO_Free se ha liberado y, posteriormente, muere de forma inesperada y provoca el bloqueo.

1

Sin mi bola de cristal solo puedo adivinar, pero es probable release d algo manualmente que ya estaba marcado para autorelease.

Lea el Memory Management Programming Guide, especialmente el Memory Management Rules! Dos veces.

+0

Bueno, fue una de las primeras cosas en las que pensé. He revisado mi código dos veces, no hay una versión doble ... Lo extraño es que solo ocurre de vez en cuando. También tener algunos objetos MKPinAnnotationView en el mapa. –

+1

solo sucede intermitentemente, probablemente significa que hay una condición de carrera. De todos modos, su mensaje de error nos dice que hay una versión doble, no nos da nada más para trabajar. ¿Qué espera? – hop

+0

Sí, lo sé, pero el problema ocurre incluso con una simple vista de MKMapView sin otra cosa. Intenté creando un nuevo archivo con el .XIB asociado, agregué un MKMapView, jugué con el mapa y obtuve el mismo error. Así que me preguntaba si fue un problema relacionado con el marco y si alguien más se ha enfrentado al mismo problema. –

0

Tengo este problema también al azar ...

ImageIO_Free: 0xd700000 ptr consiguió doble liberado ??? (16384 bytes) hash: 0

No sé cómo corregirlo. Parece ser un problema con el marco.

4

Hay un único hilo en los foros de desarrolladores de Apple que arroja algo más de luz sobre esto: "Map kit related crash?"

La persona que respondió a la entrada no tiene información mucho más detallada de diagnóstico y muestra que el accidente está sucediendo en un hilo separado, sin embargo, él no está generando ningún hilo que podría resultar en el comportamiento/bloqueo que está recibiendo.

Usted debe file a bug with Apple.

0

Esto me pasó a mí y creo que tengo la respuesta.

El problema parece ser agregar anotaciones a una vista de mapa. Parece que cuando llamas "addAnnotations" en una instancia MKMapView, el objeto MKMapView no retiene esos objetos. Entonces, después de jugar con el mapa y mover las anotaciones dentro y fuera de la vista, cuando llega el momento de volver a hacer las anotaciones, la memoria se ha liberado y se obtiene un error EXC_BAD_ACCESS.

Para resolver esto, solo retenga los objetos para agregarlos como anotaciones. Esto se puede lograr teniendo una variable de instancia NSMutableArray de las anotaciones actuales de los mapas. Cada vez que llame a addAnnotations, también agregue esos objetos a esta matriz retenida y debería estar todo listo.

En su archivo .h:

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

En el archivo .m:

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

Y cuando va a añadir anotaciones, hacer algo como esto:

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

Trabajando para mí hasta ahora. Se actualizará si las cosas cambian. Si elimina objetos de la vista de mapa, probablemente también desee mantener esta matriz de fuentes sincronizada para evitar "memoria inactiva"."