Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 为什么可变对象(NSMutableArray和NSMutableDictionary)需要alloc-init?而我们可以直接为不可变对象赋值_Objective C_Arrays_Mutable - Fatal编程技术网

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

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

初始化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];

初始化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的一个子类。您可以将子类的实例分配给它的超类,但不能将其分配给其他超类。

需要注意的是,除了语法糖之外,没有不可变值的直接分配。语法只是动态方法调用的简写;就编译器输出的内容而言,简写形式和方法调用形式之间没有区别。需要注意的是,除了语法糖之外,没有不可变值的直接赋值。语法只是动态方法调用的简写;简写形式和方法调用形式之间没有区别,关于编译器输出的内容。能否缩短标题并在问题正文中添加相关信息和问题?能否缩短标题并在问题正文中添加相关信息和问题?