2009-08-14 129 views
0

我有一個問題...我讀的Cocoa編程爲Mac OSX和第8章第1部分,在那裏他寫MyDocument.m文件Objective-C代碼說明?

什麼行

employees a; 

做?

employees = [[NSMutableArray alloc] init]; 

以上,這意味着員工是一個可變的數組,但我不知道什麼

employees a; 

一樣。

我只是猜測,但它看起來像代碼檢查,看看參數a是否已經等於僱員的內容。如果是,退出該功能,否則它會釋放員工並將員工設置爲等於?

感謝您的幫助!

回答

5

我想你在看第3版的第127頁。

在init功能,僱員陣列被初始化:

employees = [[NSMutableArray alloc] init]; 

這產生一個可變的陣列,然後設置員工變量指向它。

我想,那麼你問的是存取函數:

-(void)setEmployees:(NSMutableArray *)a 
{ 
    if (a == employees) 
     return; 

    [a retain]; 
    [employees release]; 
    employees = a; 
} 

這是當你改變一個KVC方式的員工陣列,隨後調用的函數;這看起來不同於初始化代碼,因爲傳入的NSMutable數組已經創建。

首先,函數檢查它是否與當前僱員數組是相同的數組,如果是,則不需要作任何更改,以便函數返回。

然後,傳入的數組被保留,並且現有的數組被釋放。之後,employees數組被設置爲指向新數組a。在將其設置到新陣列之前釋放當前僱員陣列非常重要,這樣您就不會泄漏內存。

希望這會有所幫助。

2

這似乎是錯誤的。 Objective-C沒有像這樣分配對象的概念,你必須用指針和alloc來做所有事情。它應該是:

NSMutableArray *employees; // don't forget the * 
employees = [[NSMutableArray alloc] init]; // allocation + constructor call 

但是,如果這本書的員工定義爲一個指向NSMutableArray的,也可以是正確的:

typedef NSMutableArray *employees; 
employees a; 
a = [[NSMutableArray alloc] init]; // it's "a", not "employees" here 

行「員工」;可以正確使用typedef,但是在這兩種情況下,下列行都是錯誤的。您無法爲類型指定值。

+0

我的不好,實際上是員工= a。 – hahuang65 2009-08-14 08:17:59

+0

@ hahuang65 - 你可以編輯你的問題來反映這一點。 – Abizern 2009-08-14 17:37:31