Tengo un problema muy extraño con los instrumentos de fugas Xcode 4.3 memoria ... Básicamente no funciona en los siguientes casos ...en IOS con xCode 4.3
- proyecto se crea sin ARC apoyo.
- crear una clase simple que hereda UIView
- utilizar un "botón" para crear instancia de esta clase y "fugas" que ... la fuga no será captura por los instrumentos de fugas
asi que aquí hay el código de la clase PROBLEMÁTICO
@interface LeakTestView : UIView
- (id)initWithFrame:(CGRect)frame;
@end
@implementation LeakTestView
- (id)initWithFrame:(CGRect)frame
{
NSLog(@"initWithFrame called");
self = [super initWithFrame:frame];
if (self) {
// Initialization code
}
return self;
}
@end
Y ahora creo que la fuga ...
- (IBAction)leak:(id)sender {
LeakTestView* leak=[[LeakTestView alloc]initWithFrame:CGRectMake(0, 0, 100, 100)];
NSLog(@"class is %@", [leak class]);
}
Así que el problema es que no se detectará esta fuga ...
Si cambio de la clase base a NSObject y en lugar de initWithFrame init anulación (ver abajo) y luego se detectó la fuga ....
así que aquí es el código de fuga que se detectarán
@interface LeakTestView : NSObject
- (id) init;
@end
@implementation LeakTestView
- (id) init {
NSLog(@"init called");
self = [super init];
if (self) {
}
return self;
}
@end
Si creo objeto ahora y lo dejo - la detección de fugas se disparará y la fuga será "visto" en los instrumentos.
- (IBAction)leak:(id)sender {
LeakTestView* leak=[[LeakTestView alloc]init];
NSLog(@"class is %@", [leak class]);
}
¿Alguna idea de qué está pasando? ¿Por qué no se detectará la pérdida de la subclase UIView, pero cambiar la clase base a NSObject "solucionará" el problema? Ah, sí, el objeto filtrado se puede ver con el "Mark Heap": una marca antes de la fuga y una marca después de hacer clic en el botón y crear la fuga: la clase se verá en el montón delta ...
EDIT: una situación más "divertida" ... Si quito las cosas "init" (sólo el objeto alloc)
LeakTestView* leak=[LeakTestView alloc];
continuación, la fuga será detectada no importa qué es la clase base ... lo diablos está pasando aquí?
EDIT2: una cosa más "divertida". El problema de detección de fugas solo se puede observar en Simulator (iOS 5.0, 9A334 es mío) pero la fuga se detectará siempre si se utiliza el dispositivo iPad ...
¿Algún comentario? Si no tienes el problema o consideras que pronuncio "mentiras" solo dime que estoy equivocado y que el caso anterior está funcionando "bien" - las fugas que describo son detectadas por tus instrumentos xCode.
¿Qué "instrumentos"? ¿Qué detector (es) de fugas estás usando? –