I have a doubt about the weak property in ARC (auto-advertisement counting)
My understanding (correct me if I am wrong):
weak property behaves similar to the assign property, except that when the instance that the property indicated was destroyed, ivar is set to zero.
Question:
- I just feel that the receiver of the
weak property is saving and auto-implementing. Shouldn't this behave like the getter of the assign property, where the getter doesnโt save auto-advertisement as well? (Pls refers to the program)
Program:
I have given below a program with the actual result and the expected output.
Note When I change the property from weak to assign , my expected result is fulfilled
#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); }
Actual output:
a1 = 0x10d713f50 --- end of block 1 --- end of autoreleasepool 1 instance of A deallocated = 0x10d713f50 ---- end of main instance of B deallocated = 0x10d713d30
My expected result:
a1 = 0x10d713f50 --- end of block 1 instance of A deallocated = 0x10d713f50 --- end of autoreleasepool 1 ---- end of main instance of B deallocated = 0x10d713d30
thanks
source share