繁体   English   中英

分配NSMutableArray的正确方法

[英]correct way to allocate the NSMutableArray

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

NSMutableArray *a;

其中a是类级别变量。

第一种方法是:

self.a = [NSMutableArray alloc] init];

第二种方法是:

a = [NSMutableArray alloc] init];

哪种方法更好? 有人可以帮我吗?

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

您可以这样做:

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

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

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

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

方法之间的区别:

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

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

有两种查看方法。

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

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

如果仅读取对象的值,通常直接使用对象是安全的。 如果要修改对象,则应使用访问器,以确保正确通知了其他所有观察该属性的对象。

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM