第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

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

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

BIG陽 2019-02-05 15:11:01
只考慮array為NSArray的情況。如題。---------------------------------------看了下面的回答,可以確定的是,兩個方法創(chuàng)建出來兩個的Array肯定是兩個不同的NSArray實例。其實我更想問的是,數(shù)組中的元素,兩者有沒有不同?
查看完整描述

3 回答

?
尚方寶劍之說

TA貢獻1788條經(jīng)驗 獲得超4個贊

并不是等效的

  1. [NSArray arrayWithArray:array]始終會創(chuàng)建一個新的NSArray對象,并進行填充,copy不會,對于immutable類型的NSArray,copy只是執(zhí)行了 retain操作,兩個對象共享內(nèi)存,并沒有創(chuàng)建新對象

  2. 如果array是 nil,copy的結果也將是nil,而后者會返回一個空的NSArray


補充回答,

如果arrayimmutable類型的NSArray

  • copy只是retain,沒有創(chuàng)建新對象

  • arrayWithArray 創(chuàng)建了新的NSArray對象,并將原有數(shù)組元素填充進去,數(shù)組元素還是原來的對象

如果arraymutable類型的NSArray

  • 二者最終結果是等效的,創(chuàng)建了新的NSArray對象,但數(shù)據(jù)元素還是原來的對象

如果array == nil

  • copy的結果是nil

  • arrayWithArray 結果是長度為0的NSArray對象

無論哪種情況,數(shù)組元素都是共享的 不會被復制


查看完整回答
反對 回復 2019-03-16
?
莫回無

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

)


查看完整回答
反對 回復 2019-03-16
?
FFIVE

TA貢獻1797條經(jīng)驗 獲得超6個贊

效果一樣,copy指示對象的引用計數(shù)+1,
arrayWithArray:是+方法,也是計數(shù)+1



查看完整回答
反對 回復 2019-03-16
  • 3 回答
  • 0 關注
  • 661 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網(wǎng)微信公眾號