提问人:AbcUser 提问时间:4/8/2017 最后编辑:rmaddyAbcUser 更新时间:4/8/2017 访问量:178
为什么可变对象(NSMutableArray 和 NSMutableDictionary)需要 alloc- init?而我们可以直接为不可变对象赋值
Why mutable object(NSMutableArray and NSMutableDictionary) required alloc- init?while we can directly assign value to immutable objects
问:
//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"];
答:
3赞
Rob Napier
4/8/2017
#1
有很多方法可以初始化。例如:NSMutableArray
NSMutableArray *arr = [NSMutableArray arrayWithObjects: @"iPhone", @"Android", nil];
文字语法是 ObjC 的一个相当新的补充,它返回一个(不可变的),这就是为什么你不能直接将其分配给 .这只是 .不过,如果您想使用该语法,您仍然可以:@[]
NSArray
NSMutableArray
[NSArray arrayWithObjects:count:]
NSArray *brr = [@[@"iPhone",@"Android"] mutableCopy];
评论
1赞
bbum
4/8/2017
需要注意的是,除了句法糖之外,没有直接分配不可变值。语法只是动态方法调用的简写;就编译器输出的内容而言,简写和方法调用形式之间没有区别。
1赞
Dima
4/8/2017
#2
这就是字面语法的方式。在 Objective-C 中,它创建一个 .如果你真的想使用语法,但最终得到一个可变数组,你可以使用这样的副本:NSArray
NSMutableArray *brr=@[@"iPhone",@"Android"].mutableCopy;
这个系统在 Swift 中要好得多,它只是一个值类型调用,你可以用 a 或 a 来设置可变性Array
var
let
var myArray = ["iPhone", "Android"] // mutable
let myArray = ["iPhone", "Android"] // immutable
1赞
matt
4/8/2017
#3
您反对两步过程:
//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"]];
0赞
Owen Zhao
4/8/2017
#4
因为文字的类型是不可变的。此外,您应该记住 NSMutableArray 是 NSArray 的子类。您可以将子类的实例分配给其超类,但不能将其分配给其超类。
评论