在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ì)的界限,要看需求了。
免責(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)容。