Objective c (保留)存取器如何工作?

Objective c (保留)存取器如何工作?,objective-c,memory-management,accessor,Objective C,Memory Management,Accessor,这个问题可能在别处有答案,但我还没有看到。 我已经读了两遍《内存管理指南》,仍然对此感到好奇 假设我创建了一个这样的实例变量 @interface @property(nonatomic,retain)NSArray *myArray; @end 现在再想象一下,我使用类中某个地方的访问器获取或设置myArray 比如说 NSArray* arrayInit = [[NSArray alloc]initWithObjects:@"1",@"2",nil]; self.myArray = a

这个问题可能在别处有答案,但我还没有看到。 我已经读了两遍《内存管理指南》,仍然对此感到好奇

假设我创建了一个这样的实例变量

@interface

@property(nonatomic,retain)NSArray *myArray;

@end
现在再想象一下,我使用类中某个地方的访问器获取或设置myArray

比如说

NSArray* arrayInit = [[NSArray alloc]initWithObjects:@"1",@"2",nil];
self.myArray = arrayInit;
[arrayInit release];
通过使用访问器方法,我是否将myArray的保留计数增加了1

我的典型dealloc方法如下所示:

-(void)dealloc{
[myArray release];
[super dealloc];
}
一个相关的问题是,当我与“myArray”交互时,我是否应该始终使用访问器。
例如,始终编写self.myArray.count是否明智?

第一个问题的答案是肯定的


当访问器存在时,通常最好使用访问器,所以请再说一遍。请注意,调用访问器可能会产生副作用,这取决于它是自定义的,还是为该成员设置了KVO。因此,直接在成员上调用release或通过访问器将其设置为nil可能会导致不同的结果,您应该知道。

我写了一个关于这方面的问题,并在这里得到了一些很好的答案:


希望这有帮助

所以每次你使用retain访问器时,你必须在你使用完它后释放它?