Más

Dibujar en AGSSketchGraphicsLayer conduce a un problema de memoria

Dibujar en AGSSketchGraphicsLayer conduce a un problema de memoria


En mi aplicación tengo una funcionalidad para registrar el GPS. Estoy usando AGSSketch GraphicLayer para hacer el dibujo con los puntos recibidos del GPS / administrador de ubicación.

Veo que las asignaciones de memoria se montan a medida que aumenta el número de ubicaciones. Usé la herramienta de instrumentos (viene junto con Xcode) para saber qué objetos conducen a ella. La herramienta muestra que la capa de boceto está provocando el salto en las asignaciones de memoria.

Hay alguna manera de evitar esto. Pocos blogs sugirieron actualizar el sdk de ArcGIS, pero eso no ayudó.


Me las arreglé para resolver el problema yo mismo. Quiero mencionar los cambios que hice, con la esperanza de que pueda ahorrar tiempo a otras personas que enfrentan el mismo problema.

Esto es lo que estaba sucediendo en mi caso: el GPS estaba dando los puntos con frecuencia y mi código estaba dibujando los puntos en la capa de boceto. Toda esta ejecución estaba sucediendo en un solo hilo. Después de dibujar cada punto en sketchLayer, el punto se elimina de la memoria (al menos mi código lo hace). Mi observación es que la memoria no se vacía instantáneamente, sino que se agrega al grupo de liberación automática y que se vacía al final del hilo. así que en mi caso, hasta que le pido al administrador de ubicación que me dé puntos, el hilo estaba ocupado recolectando los puntos y dibujando en la capa de boceto.

Solución: para dibujar los puntos en la capa de boceto, estaba iterando a través de la matriz de puntos recibidos del administrador de ubicación. He introducido un grupo de liberación automática en la matriz, por lo que cada iteración crearía un nuevo grupo y se eliminaría al final de la iteración. De esta manera, mi problema se resolvió y no es un problema de Sketch / capa gráfica sino mi mala implementación :( Sin embargo, estoy feliz de haber aprendido mi error y lo he corregido :)

fragmento de código: pendienteLocations es la matriz de ubicaciones de "- (void) locationManager: (CLLocationManager *) administrador didUpdateLocations: (NSArray *) ubicaciones"

para (CLLocation * loc in pendienteLocations) {@autoreleasepool {// Hacer el dibujo en la capa de boceto}}

Ver el vídeo: Problemas Geométricos 1