[array copy] 和 [NSArray arrayWithArray:array] ?

只考虑array为NSArray的情况。如题。

---------------------------------------

看了下面的回答,可以确定的是,两个方法创建出来两个的Array肯定是两个不同的NSArray实例。

其实我更想问的是,数组中的元素,两者有没有不同?


BIG阳
浏览 674回答 3
3回答

尚方宝剑之说

并不是等效的[NSArray arrayWithArray:array]始终会创建一个新的NSArray对象,并进行填充,copy不会,对于immutable类型的NSArray,copy只是执行了 retain操作,两个对象共享内存,并没有创建新对象如果array是 nil,copy的结果也将是nil,而后者会返回一个空的NSArray补充回答,如果array是immutable类型的NSArraycopy只是retain,没有创建新对象arrayWithArray 创建了新的NSArray对象,并将原有数组元素填充进去,数组元素还是原来的对象如果array是mutable类型的NSArray二者最终结果是等效的,创建了新的NSArray对象,但数据元素还是原来的对象如果array == nilcopy的结果是nilarrayWithArray 结果是长度为0的NSArray对象无论哪种情况,数组元素都是共享的 不会被复制

莫回无

等效。lldb运行结果如下:(lldb) po NSArray* $test = [@[@"1",@"2"] copy](lldb) po $test<__NSArrayI 0x126f70430>(1,2)(lldb) po NSArray* $test2 = [NSArray arrayWithArray:@[@"1",@"2"]](lldb) po $test2<__NSArrayI 0x1270b4460>(1,2)

FFIVE

效果一样,copy指示对象的引用计数+1,arrayWithArray:是+方法,也是计数+1
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java