2012-04-19 20 views
0

以下代碼段的解析有什麼區別。 哪些代碼段在分析中更快?NSArray解析有什麼不同?

NSArray *arr = [[NSArray alloc] initWithObjects:@"Apple",@"Macbook", nil]; 

NSMutableArray *data = (NSMutableArray *)arr; 

(和)

NSArray *arr = [[NSArray alloc] initWithObjects:@"Apple",@"Macbook", nil]; 

NSMutableArray *data = [NSMutableArray arrayWithArray:arr]; 
+1

你沒有真正在這裏 「解析」 任何東西。你的第二個例子更接近正確,但是你泄漏了一個空的可變數組。 – Caleb 2012-04-19 17:34:39

+0

...給出的所有答案都是正確的,並且重點突出。我仍然想添加一些東西。也許這只是你的措辭,但我對你的速度問題感到惱火(「解析速度更快」)。如果您確實需要優化,請使用儀器進行測量,並且只會優化那些成爲瓶頸的事情。測量比假設好得多。 – Till 2012-04-19 18:49:01

回答

3

你必須在這兩個片斷同樣的錯誤,你爲對象分配內存,然後分配給數據別的東西,它讓你失去了以前的(和有內存泄漏),例如這樣的:

NSMutableArray *data = [[NSMutableArray alloc] init]; 
data = [NSMutableArray arrayWithArray:arr]; 

應該

NSMutableArray *data = [NSMutableArray arrayWithArray:arr]; 

現在的問題本身:

  1. 第一種情況是一個壞主意,你投的NSArray的,但你canot修改它,因爲你沒有真正改變它的類型,只把它分配給NSMutaleArray指針。

  2. 第二種情況將創建一個新的NSMutableArray,它是可變的,包含NSArray的內容,這很酷,現在可以改變這個數組。

+0

+1,並且在第一個片段中,他將一個不可變的NSArray分配給一個可變的NSMutableArray,如果他稍後嘗試對其進行變異,將會觸發異常。 – Till 2012-04-19 17:34:00

+0

謝謝。我修復它。請回答我的問題。 – 2012-04-19 17:34:20

+0

@Till - 你是對的,首先我對評論太過分了,在我完成之前提交了答案。編輯。 – MByD 2012-04-19 17:34:51

1

它看起來像你想要的或者是:

NSArray *arr = [[NSArray alloc] initWithObjects:@"Apple",@"Macbook", nil]; 
NSMutableArray *data = [arr mutableCopy]; 

或:

NSMutableArray *data = [[NSMutableArray alloc] initWithObjects:@"Apple",@"Macbook", nil];