为什么可变对象(NSMutableArray和NSMutableDictionary)需要alloc-init?而我们可以直接为不可变对象赋值

时间:2017-04-07 17:35:46

标签: objective-c arrays mutable

//Mutable object...


//first initialize

NSMutablearray *arr=[[NSMutableArray alloc]init];


//then add value

[arr addobjects:@"iPhone",@"Android",nil];




//But we can assign value immutable array without initialize

NSArray *brr=@[@"iPhone",@"Android"];

4 个答案:

答案 0 :(得分:3)

有很多方法可以初始化NSMutableArray。例如:

NSMutableArray *arr = [NSMutableArray arrayWithObjects: @"iPhone", @"Android", nil];

@[]文字语法是ObjC的一个相当新的补充,它返回NSArray(不可变),这就是为什么你不能直接将它分配给{{1} }。这只是NSMutableArray的语法糖。如果您想使用该语法,您仍然可以:

[NSArray arrayWithObjects:count:]

答案 1 :(得分:1)

这就是文字语法的方式。在Objective-C中,它创建了一个NSArray *brr = [@[@"iPhone",@"Android"] mutableCopy]; 。如果你真的想要使用语法但最终得到一个可变数组,你可以使用这样的副本:

NSArray

这个系统在Swift中要好得多,它只是一个名为NSMutableArray *brr=@[@"iPhone",@"Android"].mutableCopy; 的值类型,你用Arrayvar

设置可变性
let

答案 2 :(得分:1)

您反对两步流程:

//first initialize
NSMutableArray *arr=[[NSMutableArray alloc]init];
//then add value
[arr addobjects:@"iPhone",@"Android",nil];

你说你宁愿写一个文字数组:

NSArray *brr=@[@"iPhone",@"Android"];

所以结合起来:

NSMutableArray* arr = [NSMutableArray arrayWithArray: @[@"iPhone",@"Android"]];

答案 3 :(得分:0)

因为文字的类型是不可变的。此外,您应该记住NSMutableArray是NSArray的子​​类。您可以将子类的实例分配给其超类,但不能。否则。