tag files como app activar iphone objective-c calayer retain

iphone - files - enviado a instancia desasignada



nfc iphone 8 (7)

¡Rastreando qué vista es realmente útil! Puede ser bastante trivial si conoce el marco y qué superlayers y subcapas están relacionados con esa vista ... Si registra todas las capas es solo para buscar y encontrar la misma dirección de memoria. ¡Buena suerte! :)

Añade esta categoría a tu aplicación

Encabezado de categoría:

#import "CALayer+debug.h" @interface CALayer (Debug) -(NSString*)debugDescription; -(NSString*)debugLayerTree; @end

Categoría-Implementación:

#import <Foundation/Foundation.h> #import <QuartzCore/QuartzCore.h> #import "CALayer+debug.h" #import <UIKit/UIKit.h> #import <objc/runtime.h> #import <objc/message.h> @implementation CALayer (Debug) //.... void Swizzle(Class c, SEL orig, SEL new) { Method origMethod = class_getInstanceMethod(c, orig); Method newMethod = class_getInstanceMethod(c, new); if(class_addMethod(c, orig, method_getImplementation(newMethod), method_getTypeEncoding(newMethod))) class_replaceMethod(c, new, method_getImplementation(origMethod), method_getTypeEncoding(origMethod)); else method_exchangeImplementations(origMethod, newMethod); } + (void)swizzle { Swizzle([self class], @selector(init), @selector(newInit)); } - (id)newInit { self = [self newInit]; [self performSelector:@selector(log) withObject:self afterDelay:0.5]; return self; // calls old method } - (void)log { NSLog(@"%@", [self debugDescription]); } - (NSString *)debugDescription { return [NSString stringWithFormat:@"%@ frame=%@ zAnchor=%1.1f, superlayer: %@>", [self description], NSStringFromCGRect(self.frame), self.zPosition, self.superlayer]; } @end

Llamar desde, por ejemplo, appdelegate

[CALayer swizzle];

Cada vez que presiono un controlador de vista en mi pila, luego lo saco, aparece este error:

*** -[CALayer retainCount]: message sent to deallocated instance <memory address>

Parece que ocurre justo después de que se llama a dealloc en el controlador de vista que se está extrayendo y es exclusivo solo de este controlador de vista. Estoy seguro de que CALayer tiene algo que ver con la vista en sí misma, ya que no los uso.

¿Algunas ideas?

Edit: Aquí está el backtrace

(gdb) bt #0 0x01fcd3a7 in ___forwarding___ () #1 0x01fa96c2 in __forwarding_prep_0___ () #2 0x01fc10e8 in CFGetRetainCount () #3 0x01cbc770 in CA::release_root_if_unused () #4 0x01cbc707 in x_hash_table_remove_if () #5 0x01cbc4ec in CA::Transaction::commit () #6 0x01cc4838 in CA::Transaction::observer_callback () #7 0x01fa5252 in __CFRunLoopDoObservers () #8 0x01fa465f in CFRunLoopRunSpecific () #9 0x01fa3c48 in CFRunLoopRunInMode () #10 0x027dd615 in GSEventRunModal () #11 0x027dd6da in GSEventRun () #12 0x0057cfaf in UIApplicationMain () #13 0x00002dec in main (argc=1, argv=0xbfffeed0)


Estaba recibiendo el mismo error. Hice un objeto UIView para mantener dos botones, que luego agregué al elemento de rightBarButtonItem mi elemento de rightBarButtonItem . El problema es que utilicé el método buttonWithType para crear los botones, pero simplemente alloc e initWithFrame mi vista. Luego, cuando terminé con la vista, la estaba liberando y, más tarde, cuando el sistema intentaba liberar los dos botones (subvistas de la UIView ya lanzada) - crash - Estaba enviando un mensaje a los botones ya liberados. Espero que esto ayude a alguien a ahorrar algo de tiempo en problemas similares.


Esto es un poco complicado, el mío fue un lanzamiento doble en una función dealloc de una de las clases (m / xib) que tuve en una vista de tabla como un estilo de fila. Los instrumentos no mostraron mucho sobre el objeto, pero verificar la pila de llamadas fue realmente útil para señalar qué clase era la que iba a -1.


Tengo una sospecha de que tiene que ver con el grupo de liberación automática ...


Tuve el mismo error y fue porque creé un UIButton utilizando buttonWithType (por ejemplo, [UIButton buttonWithType:UIButtonTypeRoundedRect] ) y lo [UIButton buttonWithType:UIButtonTypeRoundedRect] después. Esto fue incorrecto porque buttonWithType ya tiene un autorelease incluido. Así que quité mi release y el error desapareció.


Tuve un problema similar Mi problema fue que una de las variables de objeto declaradas en la interfaz se declaró erróneamente con (nonatomic, assign) y no como (nonatomic, retain) , como debería haber sido. Esto provocó que se enviara un mensaje de liberación a un objeto que ya contaba con un recuento de 0 (= bloqueo).


Tuve un problema similar; Resulta que no estaba reteniendo un UIButton correctamente. Cómo encontré la causa: - Habilitar zombies - Ejecutar el proyecto con el instrumento ''Asignaciones'' - Usar la aplicación para desencadenar el error - Verificar que los instrumentos muestren el mensaje ''Zombie Messaged'' en la línea de tiempo - Debería haber un enlace que abra los detalles de CALayer: cuando se asignó y se desasignó: está interesado en el lugar donde se asignó, debe ser que ¡aha! colocar en su código

¡Buena suerte!