Presioné ALT + CMD + R y activé NSZombieEnabled en Argumentos> Variables de entorno. Además, lo activé en Diagnósticos> Administración de memoria> Activar objetos zombi.¿Cómo depurar el "mensaje enviado a la instancia desasignada" en Xcode4?
Sin embargo, cuando construí y correr, en algún momento mis aplicación se bloquea darme este mensaje inútil en la consola:
*** -[CALayer retainCount]: message sent to deallocated instance 0x656b260
El seguimiento de pila es igual de inútil. Moví el control deslizante de nivel de detalles hacia la derecha. 1 hilo simplemente me muestra esto:
Todo es propiedad del sistema y no hay una sola línea en relación con mi aplicación. Así que obviamente NSZombiesEnabled no funciona como lo hizo en Xcode 3, donde se detuvo en el objeto muerto.
¿Hay alguna manera de averiguar que CALayer se desasigna demasiado pronto?
Actualización: Entonces, después de construir y ejecutar aproximadamente 100 veces más, de repente el problema desapareció. ¡Se ha ido por completo! Y la mejor parte: ¡no modifiqué mi código de ninguna manera! Entremedio, limpié la carpeta de compilación y proyecto con los comandos limpios varias veces y también borré la aplicación en el simulador varias veces.
Actualización 2: Afortunadamente el problema volvió a aparecer. Y ahora parece persistente. Afortunadamente, porque prefiero encontrar la causa raíz en lugar de molestar a los usuarios de forma aleatoria.
Actualización 3: Finalmente encontramos por casualidad:
startButton = newBttn;
debería haber sido:
self.startButton = newBttn;
startButton era una propiedad de retención y en -dealloc me soltó. Así que se soltó mucho y en la mayoría (pero no en todos) los casos después de que la vista se desvaneciera, se bloqueó al dar ese extraño mensaje de retención de CALayer.
El Zombies Instrument (CMD + I) finalmente señaló que tenía que ver con un botón. Simplemente no sabía por qué y dónde.
Clang Static Analyzer no se quejó de este error obvio.
No sólo fallo "soluciones en sí". Es muy probable que se trate de un problema de propiedad relacionado con la concurrencia y es bastante probable que aún exista en el código. Una bomba de relojería, si quieres. En sus zapatos, analizaré muy detenidamente cómo estoy administrando los recursos basados en Core Animation ... – bbum
¿Qué quiere decir exactamente con recursos basados en Core Animation? – dontWatchMyProfile
Cualquier cosa relacionada con tirar basura en la pantalla. Si está demandando a cocos2d, deberá revisar su administración de los recursos que contiene, ya que administra indirectamente los recursos de CA *. – bbum