(保留)访问器如何工作?

时间:2011-03-30 20:20:24

标签: objective-c memory-management accessor

这个问题可以在别处回答,但我还没有看到。 我现在已经两次阅读了“内存管理指南”,但仍然对此感到疑惑。

想象一下,我创建了一个像这样的实例变量......

@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是明智的吗?

2 个答案:

答案 0 :(得分:0)

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

在存在时使用访问器通常更好,所以再次使用YES。请注意,调用访问者可能会产生副作用,具体取决于它是否为自定义,或者是否为该成员设置了KVO。因此,直接在成员上调用release或通过访问器将其设置为nil会导致您应该注意不同的结果。

答案 1 :(得分:0)

我写了很多关于此问题的问题,并在此处获得了一些优秀的答案:iPhone memory management (with specific examples/questions)

希望这有帮助!