NSMutableArray arrayWithArray与NSArray mutableCopy相比是否相同?

see*_*r12 7 objective-c nsmutablearray ios6

鉴于以下代码示例,newMutableArrray变量是否根据两个不同的初始化而不同,或者相同?

NSArray *originalArray = @[obj1, obj2, oj3];

NSMutableArray *newMutableArray = nil;

if (thereIsSomeDifference) {  
    newMutableArray = [NSMutableArray arrayWithArray:originalArray];  
}  
else {  
    newMutableArray = [originalArray mutableCopy];  
} 
Run Code Online (Sandbox Code Playgroud)

Joh*_*mph 15

不!这些初始化之间存在两个差异:

  1. 保留计数:在第一种情况下,你得到一个自动释放的对象,在第二种情况下,你得到一个保留的对象,你需要在之后释放它(这不适用于ARC)

  2. 如果originalArray为nil,在第一种情况下,你将获得一个带有0项的可变数组,在第二种情况下,你将获得nil(因为向nil发送消息返回nil).在你的例子中,很明显originalArray不是零,但在现实生活中你可以达到这种情况(我刚才有案例)


Ram*_*uri 7

如果数组具有相同的对象(以相同的顺序),则该数组等于另一个数组(isEqualToArray:selector).这是使用isEqual:方法验证的(忽略数组是否可变).

它们是相同的,一个或另一个初始化没有任何区别.验证此日志记录isEqualToArray的结果:.

NSArray *originalArray = @[obj1, obj2, oj3];
NSMutableArray *newMutableArray = nil;
newMutableArray = [NSMutableArray arrayWithArray:originalArray];  
thereIsSomeDifference= ![newMutableArray isEqualToArray: [originArray mutableCopy] ];
Run Code Online (Sandbox Code Playgroud)

请注意,即使您将其与非可变副本进行比较,该比较也将为真.

  • 你应该澄清,如果里面的对象是相同的**两个数组是相同的****对象也是相同的顺序. (2认同)
  • 注意:如果originalArray为nil,[NSMutableArray arrayWithArray:originalArray]将返回一个空的NSMutableArray,而[originalArray mutableCopy]将返回nil. (2认同)