iOS進(jìn)階之@property屬性關(guān)鍵字

nonatomic和atomic區(qū)別

在默認(rèn)情況下,由編譯器所合成的方法(setter 和 getter)會(huì)通過鎖定機(jī)制來確保其原子性。系統(tǒng)默認(rèn)使用的是atomic這個(gè)屬性,這個(gè)屬性會(huì)為setter 和 getter 方法進(jìn)行加鎖來確保線程安全的(有可能會(huì)出現(xiàn)多條線程來同時(shí)訪問這一個(gè)數(shù)據(jù))。

atomic 原子性 線程安全的系統(tǒng)會(huì)默認(rèn)給atomic修飾的屬性的setter和getter方法進(jìn)行加鎖。

nonatomic 非原子性 線程不安全的系統(tǒng)不會(huì)給atomic修飾的屬性的setter和getter方法進(jìn)行加鎖。

注意:雖然atomic是線程安全的但我們平時(shí)用到的大多數(shù)屬性都是用nonatoic來修飾的,因?yàn)閍tomic雖然是線程安全的,但系統(tǒng)會(huì)默認(rèn)給atomic修飾的屬性加鎖,而加鎖會(huì)影響系統(tǒng)的性能,我們一般使用的還是nonatomic,在開發(fā)過程中應(yīng)盡量避免多條線程來訪問同一個(gè)屬性。如果我們不寫這2個(gè)關(guān)鍵字中的任何一個(gè),則系統(tǒng)默認(rèn)生存的是atmoic。

readwrite

用readwrite修飾的屬性系統(tǒng)會(huì)自動(dòng)生存setter和getter方法

readonly

應(yīng)readonly修飾的屬性系統(tǒng)不會(huì)生存setter方法只會(huì)生成getter方法

assign

一般用來修飾基本數(shù)據(jù)類型只進(jìn)行簡單的賦值操作比如int float double CGFloat

strong

強(qiáng)引用,一般用來修飾對象,該關(guān)鍵字修飾的屬性在設(shè)置新值時(shí),設(shè)置方法會(huì)先保留新值,并釋放舊值,然后再講新值設(shè)置上去。

weak

弱引用,一般用來修飾對象,該關(guān)鍵字修飾的屬性在設(shè)置新值時(shí),設(shè)置方法既不先=保留新值,并=也不釋放舊值,此特性和assign類似,然而在屬性所指定的對象遭到釋放時(shí),屬性值也會(huì)清空nil

unsafe_unretained

此特質(zhì)的語義和assign形態(tài),但它適用于對象類型,然而在屬性所指定的對象遭到釋放時(shí),此屬性值不會(huì)清空nil,有可能會(huì)造成野指針錯(cuò)誤。

copy

此關(guān)鍵字和strong類型,然而設(shè)置方法并不保留新值,而是將其copy。當(dāng)屬性類型為NSString *時(shí),經(jīng)常使用此特別來保護(hù)其封裝性,因?yàn)閭鬟f給設(shè)置方法的新值有可能是一個(gè)NSMutableString 類的實(shí)例。這個(gè)類是NSString的之類,表示一種可以修改的字符串,此時(shí)若不拷貝字符串,那么設(shè)定萬屬性之后,字符串的值就有可能會(huì)在對象不知情的情況下遭人修改。所以就要拷貝一份不可變的字符串,來確保對象中的字符串值不會(huì)無意間變動(dòng)。

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

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

  • 1.ios高性能編程 (1).內(nèi)層 最小的內(nèi)層平均值和峰值(2).耗電量 高效的算法和數(shù)據(jù)結(jié)構(gòu)(3).初始化時(shí)...
    歐辰_OSR閱讀 30,242評論 8 265
  • Swift1> Swift和OC的區(qū)別1.1> Swift沒有地址/指針的概念1.2> 泛型1.3> 類型嚴(yán)謹(jǐn) 對...
    cosWriter閱讀 11,658評論 1 32
  • OC語言基礎(chǔ) 1.類與對象 類方法 OC的類方法只有2種:靜態(tài)方法和實(shí)例方法兩種 在OC中,只要方法聲明在@int...
    奇異果好補(bǔ)閱讀 4,522評論 0 11
  • //// @property 、屬性、修飾符// Created by mac on 2016/10/30./...
    甘哲157閱讀 1,702評論 1 8
  • 昨天早上,再一次把手機(jī)掉在了地上,這次是手機(jī)的左上角著的地,左上角屏爛了個(gè)小紋紋,和往常一樣拾起沒有在意,當(dāng)去用時(shí)...
    艾琳237閱讀 612評論 1 0

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