2012-10-08 75 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 ]; 
相关问题