assign/retain/copy

Objective-C中有兩類對(duì)象,一類是結(jié)構(gòu)體(或者基本數(shù)據(jù)類型也算),另一類是NSObject對(duì)象。

  • 對(duì)于結(jié)構(gòu)體,代碼直接會(huì)操作其實(shí)體,因此賦值操作會(huì)創(chuàng)建一個(gè)源對(duì)象的副本(一個(gè)新的對(duì)象);
  • 對(duì)于NSObject對(duì)象,必須使用指針來操作對(duì)象,所以其賦值操作相當(dāng)于復(fù)制了指針,而非對(duì)象,也就是說賦值操作使得源指針和新指針都指向同一個(gè)NSObject對(duì)象。這樣講有些難以理解,請看下面的代碼:

assign:###

簡單賦值給新對(duì)象,不增加引用計(jì)數(shù)。也就是說,

  • 當(dāng)在結(jié)構(gòu)體(或者基本數(shù)據(jù)類型也算)的時(shí)候,是創(chuàng)造一個(gè)就對(duì)象的副本;
  • 當(dāng)在NSObject對(duì)象的時(shí)候,會(huì)把對(duì)象的指針賦值。
- (void) setAssignProperty:(id)newValue
{
    self->assignProperty = newValue;
}

一般用在:

**基本數(shù)據(jù)類型\int \float \double\CGRect \真假(BOOL)\結(jié)構(gòu)體**

retain:###

釋放舊的對(duì)象,將舊對(duì)象的值賦予輸入對(duì)象,再提高輸入對(duì)象的索引計(jì)數(shù)為1。也就是說,

  • 當(dāng)在NSObject對(duì)象的時(shí)候,會(huì)把舊對(duì)象的計(jì)數(shù)- 1,然后把輸入對(duì)象的指針賦值給目標(biāo),然后新對(duì)象的計(jì)數(shù)+1。
-(void)setRetainProperty:(id)newValue
{
    if (retainProperty != newvalue)
    {
        [retainProperty release];
        retainProperty = [newValue retain];
    }
}

一般用在:

一般對(duì)象如:NSNumber(除了NSTring 對(duì)象外)

copy:###

釋放舊對(duì)象,建立一個(gè)索引計(jì)數(shù)為1的對(duì)象。也就是說,

  • 當(dāng)在NSObject對(duì)象的時(shí)候,會(huì)把舊對(duì)象的計(jì)數(shù)- 1,把輸入對(duì)象的值和內(nèi)容拷貝成副本(也就是有新的指針,新的一樣的內(nèi)容),把副本賦值給目標(biāo),計(jì)數(shù)+1。
-(void)setCopyProperty:(id)newValue
{
    if (copyProperty != newvalue)
    {
        [copyProperty release];
        copyProperty = [newValue copy];
    }
}

一般用在:

NSString、NSMutableString、block
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容