正确的方法来分配NSMutableArray

时间:2012-10-08 05:23:58

标签: objective-c nsmutablearray

我想知道哪种方法可以分配NSMutableArray

NSMutableArray *a;

其中a是类级变量。

第一种方法是:

self.a = [NSMutableArray alloc] init];

第二种方法是:

a = [NSMutableArray alloc] init];

哪种方法更好?有人可以帮我解决这个问题吗?

6 个答案:

答案 0 :(得分:1)

如果a是一个类变量,那么分配NSMutableArray的正确方法是创建一个临时数组并将其分配给类变量,然后释放临时变量。

你可以这样做:

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

答案 1 :(得分:1)

取决于属性类型。 (虽然在大多数情况下保留) 您应该使用临时值或在一个字符串中创建它并发送自动释放消息: self.a = [[NSMutableArray alloc] init] autorelease]; 您必须发送自动释放,因为属性增加保留计数为1。这与做:

相同
[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];

答案 2 :(得分:0)

有几种方法。但无论您使用的是ARC / Non-ARC,以下方式对我来说都足够了。只要确保你已经创建了属性。

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

答案 3 :(得分:0)

方法之间的区别:

1)当你使用self.a时,            你使用setter&在@synthesize中创建的getter方法。

2)当你只使用一个时,            您绕过访问器方法并直接修改实例变量。 (一个在这里)。

有两种方法可以看待它。

许多程序员说你不应该在对象的实现中调用访问器,因为这会增加不必要的开销。

其他人说你应该总是使用访问者,而不是直接访问实例变量。

如果您只读取其值,通常可以直接使用对象。如果要修改对象,则应使用访问器以确保正确通知观察该属性的任何其他对象。

答案 4 :(得分:0)

最新的目标C语法允许您非常快速地创建可变和不可变的数组。

以下两个例子证明了这一点:

 NSArray *objectsToAdd = [@"Ted", @"Ned" , @"Sed"];
 NSMutableArray *objectsToAdd = [ @[@"Ted", @"Ned" , @"Sed"] mutableCopy ];

答案 5 :(得分:-2)

NSMutableArray *a = [[NSMutableArray alloc] init];