2017-04-07 14 views
1
//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 *[email protected][@"iPhone",@"Android"]; 
+1

您能否缩短您的头衔并添加相关信息以及您在问题主体中遇到的问题? – Christoph

回答

3

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

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

@[]文字语法是一个相当新的除了ObjC,并返回一个NSArray(非可变),这就是为什么你不能直接给它分配给NSMutableArray。它只是[NSArray arrayWithObjects:count:]的语法糖。如果你想使用这种语法,你仍然可以:

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

重要的是要注意,除了语法糖之外,还有**不可改变的值的直接赋值**。语法只是动态方法调用的简写;至于编译器输出的内容,简写和方法调用形式之间没有区别。 – bbum

1

这只是字面语法的方式。在Objective-C中,它创建了NSArray。如果你真的想使用的语法,但有一个可变的数组结束了,你可以使用复制这样的:

NSMutableArray *[email protected][@"iPhone",@"Android"].mutableCopy; 

该系统是在雨燕,在那里它被称为Array只是一个价值型好得多,你设定的可变性与无论是varlet

var myArray = ["iPhone", "Android"] // mutable 
let myArray = ["iPhone", "Android"] // immutable 
1

你反对两个步骤:

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

你说你会而写文字阵列:

NSArray *[email protected][@"iPhone",@"Android"]; 

所以将它们结合起来:

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

因为字面的类型是不可改变的。另外,你应该记得NSMutableArray是NSArray的一个子类。您可以将子类的实例分配给其超类,但不能以其他方式分配。

相关问题