C array in Objective-C maintains pointer to object already deallocated
From the code:
Thing *thingA = [[Thing alloc]init];
// thingA pointer reference 0x00998
Thing *things[] = {thingA};
[thingA release];
// release method of the Thing class correctly invoked
thingA = nil;
// thingA pointer reference now is 0x0
NSLog(@"%d", things[0]);
// odd, because things[0] 开发者_StackOverflow中文版still maintains the pointer reference 0x00998
Why does the element things[0] maintain the pointer reference 0x00998?
In the moment that thingA goes dealloc through release and after to set to nil (the reference to thingA now is 0x0) how things[0] still the reference to 0x0998?
I thought that things[0] pointer would look with 0x0.
Line thingA = nil; affects only thingA reference. It doesn't affect any other reference or object itself.
You can make this example a bit simpler
Thing *thingA = [[Thing alloc]init];
Thing *thingB = thingA;
[thingA release];
thingA = nil;
// thingA is nil, but thingB still has old reference
Note, that since object itself is released, you shouldn't use thingB reference: memory it points to may be used for something else already.
加载中,请稍侯......
精彩评论