2012-10-08 83 views
1

我想知道哪個是正確的方式來分配NSMutableArray正確的方式來分配NSMutableArray

NSMutableArray *a; 

其中a是級別變量。

第方法是:

self.a = [NSMutableArray alloc] init]; 

方法二:

a = [NSMutableArray alloc] init]; 

哪種方法更好?任何人都可以幫我解決這個問題嗎?

回答

-2
NSMutableArray *a = [[NSMutableArray alloc] init]; 
+0

謝謝..在我的情況變量「 一」是類級變量 –

1

如果是一個類變量,然後分配NSMutableArray將創建一個臨時數組,並將其分配給類變量,接着通過釋放臨時變量正確的方法。

你可以這樣說:

NSMutableArray *temp = [[NSMutableArray alloc]init]; 
self.a = temp; 
[temp release]; 
0

有幾種方法。但是對於我來說,無論您是使用ARC還是使用非ARC,下面的方法都不錯。只要確保你已經創建了財產。

self.a = [NSMutableArray array];//It will return autorelease object. 
0

方法之間的區別:

1)當您使用self.a, 可以使用在@synthesize創建的setter & getter方法。

2)當您使用只是一個, 你繞過訪問方法和直接修改實例變量。 (在這裏)。

有兩種方法可以查看它。

很多程序員說,你不應該從實施對象中調用訪問器,因爲這會增加不必要的開銷。

其他一些人說你應該總是使用訪問器,並且不要直接訪問實例變量。

如果只讀取其值,通常可以直接使用對象。如果您正在修改對象,則應該使用訪問器以確保任何觀察該屬性的其他對象都得到了正確的通知。

+0

感謝您的答覆..但我得到警告潛在的泄漏當我使用這個方法self.a = [NSMutableArray alloc] init];我也釋放這個數組在dealloc方法 –

1

它取決於屬性類型。 (雖然它在大多數情況下,保留) 你應該或者使用一個臨時值或在一個字符串中創建它,併發送一個自動釋放消息: self.a = [[NSMutableArray裏的alloc] INIT]自動釋放]; 你必須發送一個autorelease,因爲一個屬性增加保留數。這是一樣的做:

[self setA:array];//where array - is newly created array 

其中:

- (void)setA:(NSMutableArray *)array { 
    if (array != a) { 
     [a release]; 
     a = [array retain];//here you increased a retain count by 1 
    } 
} 

您還可以使用創建一個自動釋放方法:

self.a = [NSMutableArray array]; 
0

最新目標C語法允許您創建可變和非可變陣列非常快。

下面的兩個例子說明這一點:

NSArray *objectsToAdd = [@"Ted", @"Ned" , @"Sed"]; 
NSMutableArray *objectsToAdd = [ @[@"Ted", @"Ned" , @"Sed"] mutableCopy ]; 
相關問題