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):

weaka 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

Respuestas a la pregunta(2)

Su respuesta a la pregunta