3 回答
TA贡献1788条经验 获得超4个赞
并不是等效的
[NSArray arrayWithArray:array]始终会创建一个新的NSArray对象,并进行填充,copy不会,对于immutable类型的NSArray,copy只是执行了retain操作,两个对象共享内存,并没有创建新对象如果
array是nil,copy的结果也将是nil,而后者会返回一个空的NSArray
补充回答,
如果array是immutable类型的NSArray
copy只是retain,没有创建新对象arrayWithArray创建了新的NSArray对象,并将原有数组元素填充进去,数组元素还是原来的对象
如果array是mutable类型的NSArray
二者最终结果是等效的,创建了新的
NSArray对象,但数据元素还是原来的对象
如果array == nil
copy的结果是nilarrayWithArray结果是长度为0的NSArray对象
无论哪种情况,数组元素都是共享的 不会被复制
TA贡献1865条经验 获得超7个赞
等效。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
)
添加回答
举报
