Objective c 为什么可变对象(NSMutableArray和NSMutableDictionary)需要alloc-init?而我们可以直接为不可变对象赋值
初始化NSMutableArray有很多方法。例如:Objective c 为什么可变对象(NSMutableArray和NSMutableDictionary)需要alloc-init?而我们可以直接为不可变对象赋值,objective-c,arrays,mutable,Objective C,Arrays,Mutable,初始化NSMutableArray有很多方法。例如: //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 NS
//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"];
@[]
文本语法是对ObjC的一个全新添加,它返回一个NSArray
(不可变),这就是为什么不能将它直接分配给NSMutableArray
。这只是[NSArray arraywhithobjects:count:][/code>的语法糖分。如果要使用该语法,您仍然可以:
NSMutableArray *arr = [NSMutableArray arrayWithObjects: @"iPhone", @"Android", nil];
初始化NSMutableArray有很多方法。例如:
//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"];
@[]
文本语法是对ObjC的一个全新添加,它返回一个NSArray
(不可变),这就是为什么不能将它直接分配给NSMutableArray
。这只是[NSArray arraywhithobjects:count:][/code>的语法糖分。如果要使用该语法,您仍然可以:
NSMutableArray *arr = [NSMutableArray arrayWithObjects: @"iPhone", @"Android", nil];
这就是字面语法的方式。在Objective-C中,它创建一个NSArray
。如果您确实想使用该语法,但最终得到一个可变数组,则可以使用如下副本:
NSArray *brr = [@[@"iPhone",@"Android"] mutableCopy];
这个系统在Swift中更好,它只是一个名为Array
的值类型,您可以使用var
或let
设置可变性
NSMutableArray *brr=@[@"iPhone",@"Android"].mutableCopy;
这就是字面语法的方式。在Objective-C中,它创建一个NSArray
。如果您确实想使用该语法,但最终得到一个可变数组,则可以使用如下副本:
NSArray *brr = [@[@"iPhone",@"Android"] mutableCopy];
这个系统在Swift中更好,它只是一个名为Array
的值类型,您可以使用var
或let
设置可变性
NSMutableArray *brr=@[@"iPhone",@"Android"].mutableCopy;
您反对两步流程:
var myArray = ["iPhone", "Android"] // mutable
let myArray = ["iPhone", "Android"] // immutable
您说您更愿意编写一个文本数组:
因此,将它们结合起来:
NSArray *brr=@[@"iPhone",@"Android"];
您反对两步流程:
var myArray = ["iPhone", "Android"] // mutable
let myArray = ["iPhone", "Android"] // immutable
您说您更愿意编写一个文本数组:
因此,将它们结合起来:
NSArray *brr=@[@"iPhone",@"Android"];
因为文本的类型是不可变的。另外,您应该记住NSMutableArray是NSArray的一个子类。您可以将子类的实例分配给它的超类,但不能分配给其他超类。因为文本的类型是不可变的。另外,您应该记住NSMutableArray是NSArray的一个子类。您可以将子类的实例分配给它的超类,但不能将其分配给其他超类。需要注意的是,除了语法糖之外,没有不可变值的直接分配。语法只是动态方法调用的简写;就编译器输出的内容而言,简写形式和方法调用形式之间没有区别。需要注意的是,除了语法糖之外,没有不可变值的直接赋值。语法只是动态方法调用的简写;简写形式和方法调用形式之间没有区别,关于编译器输出的内容。能否缩短标题并在问题正文中添加相关信息和问题?能否缩短标题并在问题正文中添加相关信息和问题?