Tengo muchas de estas anotaciones (alrededor de 2400), pero aquí está mi problema.

Me salen los siguientes errores

fuga potencial de un objeto asignado en la línea 81 y almacenado en 'annot1' fuga potencial de un objeto asignado en la línea 81 y almacenado en 'annot2'

fuga potencial de un objeto asignado en la línea 81 y almacenado en 'annot3'

Etcétera. Aquí está mi código:

MKPointAnnotation *annot1 = [[MKPointAnnotation alloc] init]; 
annot1.title = @"A"; 
annot1.subtitle=@"A1"; 
annot1.coordinate = CLLocationCoordinate2DMake(21.978954, 120.752663); 
[mapView addAnnotation:annot1]; 
MKPointAnnotation *annot2 = [[MKPointAnnotation alloc] init]; 
annot2.title = @"B"; 
annot2.subtitle=@"B2"; 
annot2.coordinate = CLLocationCoordinate2DMake(21.988607, 120.748703); 
[mapView addAnnotation:annot2]; 

MKPointAnnotation *annot4 = [[MKPointAnnotation alloc] init]; 
annot4.title = @"C"; 
annot4.subtitle=@"C1"; 
annot4.coordinate = CLLocationCoordinate2DMake(22.008867, 120.743637); 
[mapView addAnnotation:annot4]; 
MKPointAnnotation ***strong text**annot5 = [[MKPointAnnotation alloc] init]; 
annot5.title = @"D"; 
annot5.subtitle=@"D1"; 
annot5.coordinate = CLLocationCoordinate2DMake(22.016190, 120.837601); 
[mapView addAnnotation:annot5]; 
MKPointAnnotation *annot6 = [[MKPointAnnotation alloc] init]; 
annot6.title = @"E"; 
annot6.subtitle=@"E1"; 
annot6.coordinate = CLLocationCoordinate2DMake(22.024183, 120.743401); 
[mapView addAnnotation:annot6]; 
MKPointAnnotation *annot7 = [[MKPointAnnotation alloc] init]; 
annot7.title = @"F"; 
annot7.subtitle=@"F1"; 
annot7.coordinate = CLLocationCoordinate2DMake(22.055653, 121.509689); 
[mapView addAnnotation:annot7]; 
MKPointAnnotation *annot8 = [[MKPointAnnotation alloc] init]; 
annot8.title = @"G"; 
annot8.subtitle=@"G2"; 
annot8.coordinate = CLLocationCoordinate2DMake(22.070082, 120.713684); 
[mapView addAnnotation:annot8]; 

Etcetera

{

0
Jeff Ko 15 feb. 2012 a las 05:38
¿Estás usando ARC? Si no está utilizando ARC, debe liberar sus objetos después de agregarlos a su mapView.
 – 
Freddy
15 feb. 2012 a las 05:45
Después de probar ARC, todavía sucede lo mismo. ¿Dónde lo suelto? Tengo las anotaciones en ViewDidLoad. Avísame si necesitas información adicional. @ Freddy
 – 
Jeff Ko
15 feb. 2012 a las 05:59
Gracias Georg lo leeré.
 – 
Jeff Ko
15 feb. 2012 a las 06:22

1 respuesta

La mejor respuesta

Si no está utilizando ARC, debe liberar el objeto después de agregarlo a su vista de mapa.

Por ejemplo:

MKPointAnnotation *annot1 = [[MKPointAnnotation alloc] init]; 
annot1.title = @"A"; 
annot1.subtitle=@"A1"; 
annot1.coordinate = CLLocationCoordinate2DMake(21.978954, 120.752663); 
[mapView addAnnotation:annot1]; 

Debería actualizarse a:

MKPointAnnotation *annot1 = [[MKPointAnnotation alloc] init]; 
annot1.title = @"A"; 
annot1.subtitle=@"A1"; 
annot1.coordinate = CLLocationCoordinate2DMake(21.978954, 120.752663); 
[mapView addAnnotation:annot1];
[annot1 release]

La razón es que el recuento de referencias de su objeto nunca llega a cero y el objeto nunca se libera.

MKPointAnnotation *annot1 = [[MKPointAnnotation alloc] init];

Cuando asigna un objeto, tiene un recuento de referencias de 1. Si agrega un objeto a una matriz o diccionario, el recuento de referencias se incrementa. Entonces, después del siguiente bloque de código, tiene un recuento de referencias de dos.

MKPointAnnotation *annot1 = [[MKPointAnnotation alloc] init]; 
annot1.title = @"A"; 
annot1.subtitle=@"A1"; 
annot1.coordinate = CLLocationCoordinate2DMake(21.978954, 120.752663); 
[mapView addAnnotation:annot1]

Ahora, si llama a release en annot1 después de agregarlo a su vista de mapa, el objeto aún no se ha publicado. Esto se debe a que la estructura de datos en su vista de mapa hace referencia a ella.

[mapView addAnnotation:annot1]

Una vez que haya terminado con su vista de mapa y se haya liberado, annot1 finalmente se destruirá.

1
Freddy 15 feb. 2012 a las 06:16
Gracias George, lo pasé por alto por completo.
 – 
Freddy
15 feb. 2012 a las 06:18
Pero cuando uso ARC, todavía sucede lo mismo @Freddy
 – 
Jeff Ko
15 feb. 2012 a las 06:23
No debería permitirle compilar si tiene ARC habilitado. [liberación de objeto] genera un mensaje de error cuando tiene ARC habilitado. Asegúrese de liberar cada objeto que "asigne".
 – 
Freddy
15 feb. 2012 a las 06:27
OK, creo que agregar la versión lo ayuda. Muchas gracias. Liberé todo el alloc espero estas cosas de anotaciones. Pero, ¿hay alguna sugerencia además de codificar todas las 2434 anotaciones como esta? MKPointAnnotation * annot1 = [[MKPointAnnotation alloc] init]; annot1.title = @ "A"; annot1.subtitle = @ "A1"; annot1.coordinate = CLLocationCoordinate2DMake (21.978954, 120.752663); [mapView addAnnotation: annot1]; [annot1 release] @Freddy
 – 
Jeff Ko
15 feb. 2012 a las 06:36
Si tiene un montón de coordenadas que necesita codificadas, buscaría codificar una .plist. Luego, cuando construya su vista de mapa, simplemente lea el archivo plist y recorra cada coordenada.
 – 
Freddy
15 feb. 2012 a las 06:44