Objective c 分配NSMutableArray的正确方法

Objective c 分配NSMutableArray的正确方法,objective-c,nsmutablearray,Objective C,Nsmutablearray,我想知道分配NSMutableArray的正确方法 NSMutableArray *a; 其中a是类级别变量 第一种方法是: self.a = [NSMutableArray alloc] init]; a = [NSMutableArray alloc] init]; 第二种方法是: self.a = [NSMutableArray alloc] init]; a = [NSMutableArray alloc] init]; 哪种方法更好?有人能帮我一下吗?如果a是类变量,那么分配

我想知道分配
NSMutableArray
的正确方法

NSMutableArray *a;
其中a是类级别变量

第一种方法是:

self.a = [NSMutableArray alloc] init];
a = [NSMutableArray alloc] init];
第二种方法是:

self.a = [NSMutableArray alloc] init];
a = [NSMutableArray alloc] init];

哪种方法更好?有人能帮我一下吗?

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

NSMutableArray *a = [[NSMutableArray alloc] init];
您可以这样做:

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

有几种方法。但无论您是使用ARC还是非ARC,下面的方法对我来说都足够好。只需确保您已经创建了属性

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

两种方法之间的区别:

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

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

有两种方式来看待它

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

还有一些人说,应该始终使用访问器,而不要直接访问实例变量


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

这取决于属性类型。(尽管在大多数情况下,这是一种保留) 您应该使用临时值或在一个字符串中创建临时值并发送自动释放消息: 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];

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

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

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

谢谢在我的例子中,变量“a”是类级变量。谢谢你的回答。。但是当我使用这个方法self.a=[NSMutableArray alloc]init]时,我得到了潜在的泄漏警告;我还用dealoc方法发布了这个数组