溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

IOS Copy什么時(shí)候用?

發(fā)布時(shí)間:2020-07-23 20:02:15 來(lái)源:網(wǎng)絡(luò) 閱讀:597 作者:李遠(yuǎn)超0317 欄目:移動(dòng)開(kāi)發(fā)

在O-C里面有個(gè)值對(duì)象的概念,當(dāng)你新定義一個(gè)屬性是值對(duì)象時(shí)就應(yīng)該用copy來(lái)修飾。那么都什么對(duì)象是值對(duì)象呢?

值對(duì)象是指封裝了基本值(屬于 C 數(shù)據(jù)類(lèi)型)且提供與該值相關(guān)的服務(wù)的對(duì)象。值對(duì)象以對(duì)象形式表示標(biāo)量類(lèi)型。Foundation 框架向您提供了以下類(lèi)(這些類(lèi)產(chǎn)生對(duì)象,用于字符串、二進(jìn)制數(shù)據(jù)、日期與時(shí)間、數(shù)字以及其他值):


  • NSString和NSMutableString

  • NSData和NSMutableData

  • NSDate

  • NSNumber

  • NSValue


異常情況:

   API中對(duì)NSArray做為屬性時(shí)也用copy而不是retain。到底怎么回事?我有點(diǎn)暈,所以就又查了文檔

When you declare instances of the value classes as properties, you should use the copy option. 將值類(lèi)的實(shí)例聲明為屬性時(shí),應(yīng)該使用 copy 選項(xiàng)。
   意思是值對(duì)象應(yīng)該用copy而不是只有值對(duì)象用copy。

我又查了copy和retain的區(qū)別。

   copy: 建立一個(gè)索引計(jì)數(shù)為1的對(duì)象,然后釋放舊對(duì)象(兩個(gè)指針)
   retain:釋放舊的對(duì)象,將舊對(duì)象的值賦予輸入對(duì)象,再提高輸入對(duì)象的索引計(jì)數(shù)為1(一個(gè)指針)

   也就是說(shuō),retain是指針拷貝,copy是內(nèi)容拷貝

那么為什么API中的NSArray用的是copy呢?

   其實(shí)已經(jīng)很明顯了,就是防止外界對(duì)其進(jìn)行修改。

所以用copy還是retain沒(méi)有絕對(duì)的界限,要看需求了。


向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI