2011-02-11 86 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];