这是我所看到的,当我运行下面的代码:NSMutableArray的财产 - 发行儿童
// Dealloc on MyClass not called
MyClass* c = [MyClass new];
self.a = [NSMutableArray new];
[self.a addObject:c];
[c release];
[a release];
// Dealloc on MyClass called
MyClass* c2 = [MyClass new];
NSMutableArray* a2 = [NSMutableArray new];
[a2 addObject:c2];
[c2 release];
[a2 release];
// Dealloc on MyClass called
MyClass* c3 = [MyClass new];
a = [NSMutableArray new];
[a addObject:c3];
[c3 release];
[a release];
为什么dealloc中不会被调用的第一个例子吗?
编辑:
我想我是误解了这一切。基本上我需要做的是:
NSMutableArray* alocal = [NSMutableArray new]; // alocal has a retain count of 1
self.a = alocal; // a has a retain count of 1
[alocal release]; // alocal has a retain count of 0
[a release]; // a has a retain count of 0
OR
self.a = [[NSMutableArray new] autorelease]; // a has a retain count of 2
[a release]; // a has a retain count of 0
OR
self.a = [NSMutableArray array]; // a has a retain count of 2
[a release]; // a has a retain count of 0
正如一个音符,与自动释放/阵列选项(#2,#3), a不会马上释放,所以如果你想要更多的控制,请使用选项#1。
谢谢!
有趣的...所以基本上你希望它在那一刻被释放吧?这听起来很公平。通常我们只是让游泳池自动释放,但你是对的,它不会立即释放。 – raixer