3 回答

TA貢獻1788條經(jīng)驗 獲得超4個贊
并不是等效的
[NSArray arrayWithArray:array]
始終會創(chuàng)建一個新的NSArray
對象,并進行填充,copy
不會,對于immutable
類型的NSArray
,copy
只是執(zhí)行了retain
操作,兩個對象共享內(nèi)存,并沒有創(chuàng)建新對象如果
array
是nil
,copy
的結果也將是nil
,而后者會返回一個空的NSArray
補充回答,
如果array
是immutable
類型的NSArray
copy
只是retain
,沒有創(chuàng)建新對象arrayWithArray
創(chuàng)建了新的NSArray
對象,并將原有數(shù)組元素填充進去,數(shù)組元素還是原來的對象
如果array
是mutable
類型的NSArray
二者最終結果是等效的,創(chuàng)建了新的
NSArray
對象,但數(shù)據(jù)元素還是原來的對象
如果array == nil
copy
的結果是nil
arrayWithArray
結果是長度為0的NSArray
對象
無論哪種情況,數(shù)組元素都是共享的 不會被復制

TA貢獻1865條經(jīng)驗 獲得超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
)
添加回答
舉報