Nueva Información
que determina dónde se encuentra mi problema mediante la creación de un método autorelease swizzled.
No recomiendo hacerlo a menos que sepa lo que está haciendo, sin embargo, esto es lo que descubrí.
+ (void) load; //Method is called outside the original autorelease pool.
+ (void) initialize; // Method is called outside the original autorelease pool.
NSThread crea su propio subproceso, el método llamado debe incluirse en un grupo de autorrelease.
Grand Central Dispatch se encarga de adaptarse al grupo de autorrelease cuando usa los comandos "dispatch _...". sin embargo, cuando despache manualmente. es posible que desee envolverlo en un grupo de autorrelease.
Además, ARC no se encarga de avisarle que se realizará una liberación automática fuera de un grupo.
Por lo tanto, si usa ARC y sabe que estará fuera del grupo de liberación automática. Y no hay nada que puedas hacer al respecto. Querrá evitar todos los métodos de conveniencia.
usar esto.
[[NSString alloc] initWithFormat:@"%@",myObject];
en lugar de esta
[NSString stringWithFormat:@"%@",myObject];
Esto permitirá que el sistema de arco para retener y liberar, pero el autorelease subyacente realizado por el método de conveniencia, se omite ya que no se ha utilizado el método de conveniencia.
Espero que ayude.
respuesta original
Ok, no me siento a esta pregunta fue respondida con suficiente detalle.
se presenta el mensaje fue
objc[1310]: Object 0x34f720 of class SimpleKeychain autoreleased with no pool in place - just leaking - break on objc_autoreleaseNoPool() to debug
El depurador está señalando un posible punto de interrupción que le ayudará a depurar la situación. Ahora bien, mientras que este punto de interrupción realmente hizo poco para ayudar a depurar la situación. Creo que es importante saber cómo agregar ese punto de interrupción al depurador, así que me dediqué a jugar con él (después de buscar en internet y no encontrar nada) hasta que lo logré.
Es un poco molesto que romper todos los errores no capte esto, pero aquí están los pasos para agregar el punto de interrupción al depurador.
primero que quiere hacer es seleccionar el navegador punto de interrupción del depurador
haciendo clic en esta pestaña
siguiente se mira hacia la parte inferior del panel de navegación y presione el botón Más
Esto le permitirá agregar manualmente un punto de interrupción.
Seleccioné un punto de interrupción C++ e ingresé el nombre del mensaje en el campo de texto del nombre.
después de añadir esta excepción se hizo en ruptura hecho.
Sin embargo, esto puede o no ser útil para usted como desarrollador objetivo c. Esto irrumpió en el código de la Asamblea.
Por desgracia, sólo mostró este punto en la pila de llamadas del subproceso.
y resultó que el problema se debía a que autorelease una clase llamada autorelease en una llamada dispatch_once. y una investigación más profunda reveló que la carga + (vacía); el método en la clase fue llamado antes que cualquier otra cosa.esto se hace a través de la función call_load_methods y está fuera del hilo en el método principal.
para corregir esto, simplemente añade el envoltorio piscina autorelease alrededor de la llamada.
otra solución puede ser la de añadir la piscina autorelease dentro de la carga + (void); método. pero esto fue suficiente para mis usos.
NOTA: Estoy agregando esto a la publicación aquí porque no me gusta encontrar un problema y no ser capaz de encontrar todas las rutas a la respuesta resultante. Si el depurador le dice que agregue un punto de interrupción a la función enumerada, entonces debe haber alguna información en alguna parte para obtener esa información. Con suerte, esto reducirá la frustración de algunos de los que están tratando de encontrar esta respuesta.
¿tiene un grupo de autorrelease? y compruebe si la aplicación tiene fugas con uno de los programas de ayuda que puede encontrar en xcode (perfilarlo) – chikuba
No uso ningún grupo de liberación automática. A decir verdad, no entiendo por qué usarías uno, así que nunca lo hice. Pero intentaré que – Andrew
Aparece antes de la aplicación del. termina, pero comenté línea por línea todo el asunto, y todavía estoy goteando objetos. ¿Cualquier pensamiento? – Andrew