1

我想知道哪个是分配NSMutableArray.

NSMutableArray *a;

其中 a 是类级别变量。

第一种方法是:

self.a = [NSMutableArray alloc] init];

第二种方法是:

a = [NSMutableArray alloc] init];

哪种方法更好?谁能帮我解决这个问题?

4

6 回答 6

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];
于 2012-10-08T06:18:20.330 回答
1

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

你可以这样做:

NSMutableArray *temp  = [[NSMutableArray alloc]init];
self.a = temp;
[temp release];
于 2012-10-08T06:03:12.097 回答
0

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

self.a = [NSMutableArray array];//It will return autorelease object.
于 2012-10-08T06:10:50.963 回答
0

方法之间的区别:

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

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

有两种方法可以查看它。

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

其他一些人说您应该始终使用访问器,并且永远不要直接访问实例变量。

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

于 2012-10-08T06:11:03.057 回答
0

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

以下两个示例说明了这一点:

 NSArray *objectsToAdd = [@"Ted", @"Ned" , @"Sed"];
 NSMutableArray *objectsToAdd = [ @[@"Ted", @"Ned" , @"Sed"] mutableCopy ];
于 2014-01-10T20:05:13.617 回答
-2
NSMutableArray *a = [[NSMutableArray alloc] init];
于 2012-10-08T05:32:22.067 回答