ios開發(fā)筆記(1)-@property的屬性描述

示例1:

@property (nonatomic) BOOL property;

nonatomic表示不考慮多線程,編譯器不生成互斥加鎖的代碼,可以提高效率,缺點(diǎn)是在多線程環(huán)境下存在風(fēng)險(xiǎn),可能會(huì)出現(xiàn)讀寫不同步問題。

與之對(duì)應(yīng)的atomic則考慮多線程,編譯器會(huì)生成互斥加鎖的代碼,可以避免在多個(gè)線程下操作同一資源造成的死鎖、讀寫不同步問題,該屬性默認(rèn)實(shí)現(xiàn),如使用nonatomic則不實(shí)現(xiàn),缺點(diǎn)是效率低。

總結(jié):多線程使用atomic,單線程使用nonatomic。

注:以下示例僅在單線程環(huán)境下

示例2:

@property (nonatomic, assign) BOOL property;

等價(jià)于@property (nonatomic) BOOL property; assign是默認(rèn)類型,只能修飾基本類型和C數(shù)據(jù)類型,不改變引用計(jì)數(shù)。

tip: @property BOOL property; 等價(jià)于@property (atomic, assign) BOOL property;

示例3:

@property (nonatomic, retain) NSString *property;

@property (nonatomic, copy) NSString *property;

retain會(huì)在setter方法里將舊對(duì)象釋放并將舊對(duì)象的值賦給新對(duì)象,另外新對(duì)象的引用計(jì)數(shù)為1,指針指向新對(duì)象。copy和retain處理流程一樣,不同的是copy將新生成指針指向新對(duì)象,被定義有copy屬性的對(duì)象必須要符合NSCopying協(xié)議,必須實(shí)現(xiàn)- (id)copyWithZone:(NSZone *)zone方法。

示例4:

@property (nonatomic, strong) NSString *property;

@property (nonatomic, weak) NSString *property;

strong表示強(qiáng)引用,可以決定對(duì)象的生命周期,只要對(duì)象有強(qiáng)引用存在,就不會(huì)被釋放。

weak表示弱引用,不能決定對(duì)象的生命周期,只要對(duì)象不存在強(qiáng)引用,即使有多個(gè)弱引用存在,對(duì)象依然會(huì)被釋放。

示例5:

@property (nonatomic, assign, getter=methodget) BOOL property;

getter=methodget表示替換默認(rèn)setter方法,原setter方法不再有效,methodget方法內(nèi)部實(shí)現(xiàn)可重寫,類似getter方法也可以在聲明的時(shí)候替換如:@property (nonatomic, assign, getter=methodget, setter=methodSet:) BOOL property;

鑒于篇幅,屬性描述中還有其他聲明如unretain-unsafe以及ios9以后新出的nonnull、nullable之類這里不再介紹,如有描述不當(dāng)或者錯(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)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

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