ios objective-c ios7.1 cfnetwork

ios crash EXC_BAD_ACCESS KERN_INVALID_ADDRESS



objective-c ios7.1 (3)

MyApp funciona bien en el 98% de las ocasiones, pero a veces muestra un bloqueo. Y es tan aleatorio.

El informe de fallos muestra lo siguiente.

Thread : Crashed: com.apple.main-thread 0 libobjc.A.dylib 0x3b1ae626 objc_msgSend + 5 1 Foundation 0x310e2381 _netServiceMonitorCallBack + 104 2 CFNetwork 0x302ea3b5 _QueryRecordReply(_DNSServiceRef_t*, unsigned int, unsigned int, int, char const*, unsigned short, unsigned short, unsigned short, void const*, unsigned int, void*) + 324 3 libsystem_dnssd.dylib 0x3b7289d9 handle_query_response + 168 4 libsystem_dnssd.dylib 0x3b72773f DNSServiceProcessResult + 582 5 CFNetwork 0x302ea3e5 _SocketCallBack_Mon(__CFSocket*, unsigned long, __CFData const*, void const*, void*) + 20 6 CoreFoundation 0x30691189 __CFSocketPerformV0 + 580 7 CoreFoundation 0x3068efaf __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 14 8 CoreFoundation 0x3068e477 __CFRunLoopDoSources0 + 206 9 CoreFoundation 0x3068cc67 __CFRunLoopRun + 630 10 CoreFoundation 0x305f7729 CFRunLoopRunSpecific + 524 11 CoreFoundation 0x305f750b CFRunLoopRunInMode + 106 12 GraphicsServices 0x355336d3 GSEventRunModal + 138 13 UIKit 0x32f58871 UIApplicationMain + 1136 14 MyApp 0x0013f813 main (main.m:16)

Todos estos parecen métodos internos. Experimento estos bloqueos en el iPad 4 con iOS 7.1.2. ¿Cómo puedo clavarlo? Todas las ayudas apreciadas.


EXC_BAD_ACCESS La falla de KERN_INVALID_ADDRESS no se debe a una pérdida de memoria, sino debido al intento de acceder a un objeto desasignado.

Ejemplo: si __weak typeof(self) weakSelf = self; y el objeto ha sido liberado antes de que accedas dentro del bloque obtendrás el bloqueo. El motivo: acceso a una dirección de memoria incorrecta porque el objeto fue desasignado.

Para evitar este uso __strong typeof(self) strongSelf = self; dentro del bloque. Nil valor Nil se manejará correctamente sin bloqueo

Nota: use este ejemplo de código para un trabajo rápido.

#define weakify(var) __weak typeof(var) AHKWeak_##var = var; #define strongify(var) / _Pragma("clang diagnostic push") / _Pragma("clang diagnostic ignored /"-Wshadow/"") / __strong typeof(var) var = AHKWeak_##var; / _Pragma("clang diagnostic pop")

Ejemplo de uso:

weakify(self); // Remove retain cycle [self someFunctionWithBlock:^{ strongify(self); // Make reference to address valid }];


Esta es una pregunta antigua pero el bloqueo de EXC_BAD_ACCESS KERN_INVALID_ADDRESS no se debe a una pérdida de memoria, sino debido al intento de acceder a un objeto desasignado. Debido a que la memoria del objeto desasignado posiblemente ahora esté ocupada por otro objeto de diferente tipo, la última línea en la pila de fallos podría ser incorrecta porque no es realmente parte de la ruta de ejecución programada, por lo que generalmente necesitamos buscar la traza un poco. Sin embargo, el seguimiento de la pila publicado por @Sj consiste básicamente en llamadas al sistema, por lo que es realmente difícil. Si esto se genera en una sesión de depuración, agregar un punto de interrupción "Todas las excepciones" podría ayudar a generar un seguimiento de pila más informativo.


Este bloqueo se produce debido a una pérdida de memoria. Cuando cualquier variable u objeto intenta acceder a la memoria restringida, se produce este bloqueo.