【Objective-C筆記】—— 對(duì)象3

屬性

@property NSString *itemName

聲明一個(gè)屬性時(shí),會(huì)隱含地生成一個(gè)對(duì)應(yīng)名稱的實(shí)例變量和一對(duì)存取方法,其中實(shí)例變量會(huì)在變量名前加下劃線

{
    NSString *_itemName
}
- (void) setItemName: (NSString *) name;
- (NSString *) itemName;

屬性特性

@property (nonatomic, readwrite, strong) NSString *itemName

任何屬性都有三個(gè)特性,每個(gè)特性都有多種不同的可選類型。在這些可選類型中,有一種是默認(rèn)的

1. 多線程特性:nonatomic/atomic

大多要設(shè)置為nonatomic,因?yàn)椴皇悄J(rèn)的類型,所以必須明確寫(xiě)出

@property (nonatomic) NSString *itemName

2. 讀寫(xiě)特性:readwrite(默認(rèn))/readonly

  • readwrite具備存取方法
  • readonly只具備取方法

3. 內(nèi)存管理特性:strong(默認(rèn))/weak/copy/unsafe_unretained

  • strong強(qiáng)引用類型:指針變量指向某個(gè)對(duì)象,相應(yīng)對(duì)象多一個(gè)擁有者,并且不會(huì)被程序釋放
  • weak弱引用類型:可以讓指針變量不影響其指向?qū)ο蟮膿碛姓邆€(gè)數(shù),即對(duì)象的擁有者不變化,適合解決強(qiáng)引用循環(huán)問(wèn)題(首先確定父-子關(guān)系,父對(duì)象使用強(qiáng)引用類型,子對(duì)象使用弱引用對(duì)象)
@property (nonatomic, strong) UItem *containedItem;
@property (nonatomic, weak) UItem *container;
  • unsafe_unretained類型的指針指向的對(duì)象被銷毀時(shí),指針成為空指針(弱引用類型指針指向的對(duì)象被銷毀時(shí),指針會(huì)自動(dòng)設(shè)置為nil),造成過(guò)早釋放,所以不安全。ps:是非對(duì)象屬性的默認(rèn)值
  • copy當(dāng)屬性是指向其他對(duì)象的指針,而且該對(duì)象的類有可修改的子類,如NSString/NSMutableString、NSArray/NSMutableArray,這時(shí)應(yīng)該將設(shè)置為copy

自定義(覆蓋)屬性的存取方法

  • 對(duì)于readwrite類型的屬性(readonly類推),如果只定義其中一個(gè)存(或者取)方法,則編譯器只會(huì)創(chuàng)建默認(rèn)的取方法和實(shí)例變量。
  • 如果既覆蓋了存方法,又覆蓋了取方法,那么編譯器不會(huì)自動(dòng)創(chuàng)建實(shí)例變量,此時(shí)獲取不到屬性對(duì)應(yīng)的實(shí)例變量,如_itemName,會(huì)報(bào)錯(cuò)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

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