【问题标题】:How does the (retain) accessor work?(保留)访问器如何工作?
【发布时间】:2011-03-30 20:20:24
【问题描述】:

这个问题可能会在其他地方得到回答,但我还没有看到。 我已经阅读了两次内存管理指南,但仍然对此感到疑惑。

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

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

【问题讨论】:

    标签: objective-c memory-management accessor


    【解决方案1】:

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

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

    【讨论】:

    • 所以每次使用保留访问器时都必须在使用完后释放它?
    【解决方案2】:

    我写了一个关于这个问题的问题,并在这里得到了一些很好的答案:iPhone memory management (with specific examples/questions)

    希望这会有所帮助!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-16
      • 1970-01-01
      • 1970-01-01
      • 2012-08-10
      相关资源
      最近更新 更多