Objective-C - propiedad débil - autorreleases getter (conteo automático de referencias)
Tengo una duda con respecto aweak
propiedad en ARC (conteo automático de referencias)
Mi entendimiento (corrígeme si me equivoco):
weak
a propiedad @ se comporta de manera similar a laassign
propiedad excepto que cuando la instancia a la que apuntaba la propiedad se destruye, se hace que el ivar apunte a cero.
Pregunta
Siento que el captador de laweak
propiedad retiene y autoreleases. ¿No se supone que debe comportarse como captador de laassign
propiedad donde el captador no retiene y se libera automáticamente (consulte el programa)Programa
He dado a continuación el programa con la salida real y mi salida esperada.
Not - Cuando cambio la propiedad deweak
aassign
mi salida esperada se cumple
#import<Foundation/Foundation.h>
@interface A : NSObject
- (void) dealloc;
@end
@implementation A
- (void) dealloc
{
printf("\tinstance of A deallocated = %p\n", self);
}
@end
@interface B : NSObject
@property (weak) A* xa1;
- (void) dealloc;
@end
@implementation B
@synthesize xa1;
- (void) dealloc
{
printf("\tinstance of B deallocated = %p\n", self);
}
@end
int main()
{
B* b1 = [[B alloc] init];
@autoreleasepool //autoreleasepool 1
{
{ //block 1
A* a1 = [[A alloc] init];
printf("\ta1 = %p\n", a1);
b1.xa1 = a1;
A* a3 = b1.xa1;
printf("--- end of block 1\n");
} //at this point i expected instance pointed by a1 to be destroyed
printf("--- end of autoreleasepool 1\n");
}
printf("---- end of main\n");
return(0);
}
Salida real:
a1 = 0x10d713f50
--- end of block 1
--- end of autoreleasepool 1
instance of A deallocated = 0x10d713f50
---- end of main
instance of B deallocated = 0x10d713d30
Mi salida esperada:
a1 = 0x10d713f50
--- end of block 1
instance of A deallocated = 0x10d713f50
--- end of autoreleasepool 1
---- end of main
instance of B deallocated = 0x10d713d30
Gracia