2011-02-11 45 views
1

想象我有一个成员变量问题关于保留计数和初始化成员变量

@property(nonatomic,retain)NSArray *array; 

现在在我的viewDidLoad中我建立了一个简单的数组

array = [[NSArray alloc]initWithObjects:@"A",@"B","C",nil]; 

我保留阵列计数将是1对吗?

现在,如果我是使用访问方法

self.array = [[NSArray alloc]initWithObjects:@"A",@"B","C",nil]; 

是我的保留计数2,因为我的访问方法碰保留由1数到设置的阵列?

初始化成员变量的约定是什么?

+0

这是一个属性,而不是成员变量。他们是两个完全不同的东西。 – BoltClock 2011-02-11 18:02:02

+0

还要注意,Objective-C没有成员变量。它有实例变量。 (或多或少相同,但使用正确的术语是有帮助的。) – bbum 2011-02-11 22:30:58

回答

3

这是正确的,为self.array =保留计数结束为2

首先,你alloc initNSArray对象。这是一个保留计数1.其次,您的setter在将对象分配给您的实例var时向其发送一个retain消息。这会使保留数最多达到2.

初始化成员变量的约定是什么?

除了直接设置伊娃array =在你的问题,这里有一些方法你self.array属性做到不漏:

  1. 自动释放:

    self.array = [[[NSArray alloc] initWithObjects:@"A", @"B", @"C", nil] autorelease]; 
    
  2. 使用arrayWithObjects:类方法。更简单,并且还产生一个自动释放物体:

    self.array = [NSArray arrayWithObjects:@"A", @"B", @"C", nil]; 
    
  3. 创建一个临时变量来保存新的指针,则设置属性(其将有它通过然后保留)后释放它:

    NSArray *tmpArray = [[NSArray alloc] initWithObjects:@"A", @"B", @"C", nil]; 
    self.array = tmpArray; 
    [tmpArray release];