iOS中屬性關(guān)鍵詞

1. 原子性:nonatomic魂迄、atomic
2. 讀寫:readwrite注服、readonly
3. 方法名:getter<name>、setter<name>
4. 內(nèi)存:strong澎埠、retain虽缕、copy、weak蒲稳、assign氮趋、unsafe_unretain

1.原子性與非原子性

  • atomic:原子性伍派,只有一個(gè)線程可以同時(shí)訪問實(shí)例。atomic 是線程安全的(因?yàn)闀?huì)為setter方法加鎖)剩胁,至少在當(dāng)前的讀取器是安全的诉植。雖然它是一個(gè)默認(rèn)屬性,但是由于其使用同步鎖開銷較大昵观,會(huì)損耗性能晾腔。
  • nonatomic:非原子性的,可以被多個(gè)線程訪問索昂。效率要比atomic 高建车,但是不能保證其在多線程狀態(tài)下的安全性,在單線程和明確只有一個(gè)線程訪問的情況下被廣泛使用椒惨。

2.讀寫屬性

  • readwrite(默認(rèn)值):表示其同時(shí)擁有g(shù)etter 和 setter 方法缤至;
  • readonly:只讀操作,其只有g(shù)etter 方法康谆,沒有setter法

注:如果某個(gè)實(shí)例只允許被外部讀取领斥,而不能寫入操作,同時(shí)在類實(shí)現(xiàn)文件當(dāng)中可以寫入的話沃暗,可以在頭文件中聲明屬性為只讀的月洛,在實(shí)現(xiàn)文件中設(shè)置其為可讀寫的屬性,寫法如下:

//頭文件中聲明為:
@property(nonatomic,readonly,copy) NSString *stringA;
//實(shí)現(xiàn)文件中聲明為:
@property(nonatomic,readwrite,copy) NSString *stringA;

3.內(nèi)存關(guān)鍵詞

  • strong表示指向并擁有該對(duì)象孽锥。其修飾的對(duì)象引用計(jì)數(shù)會(huì)增加1嚼黔。該對(duì)象只要引用計(jì)數(shù)不為0則不會(huì)被銷毀。當(dāng)然強(qiáng)行將其設(shè)為nil可以銷毀它惜辑。
  • weak表示指向但不擁有該對(duì)象唬涧。其修飾的對(duì)象引用計(jì)數(shù)不會(huì)增加。無需手動(dòng)設(shè)置盛撑,該對(duì)象會(huì)自行在內(nèi)存中銷毀碎节。
  • assign主要用于修飾基本數(shù)據(jù)類型,如NSInteger和CGFloat抵卫,這些數(shù)值主要存在于棧上狮荔。
  • weak 一般用來修飾對(duì)象,assign一般用來修飾基本數(shù)據(jù)類型介粘。原因是assign修飾的對(duì)象被釋放后殖氏,指針的地址依然存在,造成野指針姻采,在堆上容易造成崩潰雅采。而棧上的內(nèi)存系統(tǒng)會(huì)自動(dòng)處理,不會(huì)造成野指針。
  • copy與strong類似总滩。不同之處是strong的復(fù)制是多個(gè)指針指向同一個(gè)地址,而copy的復(fù)制每次會(huì)在內(nèi)存中拷貝一份對(duì)象巡雨,指針指向不同地址闰渔。copy一般用在修飾有可變對(duì)應(yīng)類型的不可變對(duì)象上,如NSString, NSArray, NSDictionary铐望。
  • Objective-C 中冈涧,基本數(shù)據(jù)類型的默認(rèn)關(guān)鍵字是atomic, readwrite, assign;普通屬性的默認(rèn)關(guān)鍵字是atomic, readwrite, strong正蛙。
assign:用于值類型(如int督弓,float等)
weak: 用于修飾引用類型
unsafe_unretained:只修飾引用類型
區(qū)別:
1. 三者修飾效果相同,即都不會(huì)更改所賦新值的引用計(jì)數(shù)乒验,也不改變舊值的引用計(jì)數(shù)
2. assign一般只修飾值類型愚隧,雖然也可以修飾引用類型,但是修飾的對(duì)象釋放后锻全,指針不會(huì)自動(dòng)被置空狂塘,此時(shí)向?qū)ο蟀l(fā)消息會(huì)崩潰。
3. weak 不會(huì)產(chǎn)生野指針問題鳄厌。因?yàn)閣eak修飾的對(duì)象釋放后(引用計(jì)數(shù)器值為0)荞胡,指針會(huì)自動(dòng)被置nil,之后再向該對(duì)象發(fā)消息也不會(huì)崩潰了嚎。 weak是安全的泪漂。
4. unsafe_unretained與assign的區(qū)別在于,其只修飾引用類型歪泳。

strong:用于引用類型萝勤,強(qiáng)引用。
retain :用于引用類型夹囚,強(qiáng)引用纵刘。
copy:修飾屬性會(huì)在內(nèi)存里拷貝對(duì)象。
區(qū)別:
1. 三者都用于修飾引用類型荸哟。
2. strong用于ARC假哎,retain用于MRC。
3. copy分為淺層復(fù)制和深復(fù)制兩種鞍历,NSString舵抹、NSArray、NSDictionary等不可變類型都為淺層復(fù)制劣砍,即其引用計(jì)數(shù)會(huì)+1惧蛹,而不會(huì)創(chuàng)建新的內(nèi)存。

淺拷貝:對(duì)內(nèi)存地址的復(fù)制,讓目標(biāo)對(duì)象指針和原對(duì)象指向同一片內(nèi)存空間會(huì)增加引用計(jì)數(shù)
深拷貝:對(duì)對(duì)象內(nèi)容的復(fù)制香嗓,開辟新的內(nèi)存空間

可變對(duì)象的copy和mutableCopy都是深拷貝
不可變對(duì)象的copy是淺拷貝迅腔,mutableCopy是深拷貝
copy方法返回的都是不可變對(duì)象

@property (nonatomic, copy) NSMutableArray * array;這樣寫有什么影響?
因?yàn)閏opy方法返回的都是不可變對(duì)象靠娱,所以array對(duì)象實(shí)際上是不可變的沧烈,如果對(duì)其進(jìn)行可變操作如添加移除對(duì)象,則會(huì)造成程序crash

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末像云,一起剝皮案震驚了整個(gè)濱河市锌雀,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌迅诬,老刑警劉巖腋逆,帶你破解...
    沈念sama閱讀 216,591評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異侈贷,居然都是意外死亡惩歉,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,448評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門俏蛮,熙熙樓的掌柜王于貴愁眉苦臉地迎上來柬泽,“玉大人,你說我怎么就攤上這事嫁蛇∠遣ⅲ” “怎么了?”我有些...
    開封第一講書人閱讀 162,823評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵睬棚,是天一觀的道長第煮。 經(jīng)常有香客問我,道長抑党,這世上最難降的妖魔是什么包警? 我笑而不...
    開封第一講書人閱讀 58,204評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮底靠,結(jié)果婚禮上害晦,老公的妹妹穿的比我還像新娘。我一直安慰自己暑中,他們只是感情好壹瘟,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,228評(píng)論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著鳄逾,像睡著了一般稻轨。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上雕凹,一...
    開封第一講書人閱讀 51,190評(píng)論 1 299
  • 那天殴俱,我揣著相機(jī)與錄音政冻,去河邊找鬼。 笑死线欲,一個(gè)胖子當(dāng)著我的面吹牛明场,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播李丰,決...
    沈念sama閱讀 40,078評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼榕堰,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了嫌套?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,923評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤圾旨,失蹤者是張志新(化名)和其女友劉穎踱讨,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體砍的,經(jīng)...
    沈念sama閱讀 45,334評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡痹筛,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,550評(píng)論 2 333
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了廓鞠。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片帚稠。...
    茶點(diǎn)故事閱讀 39,727評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖床佳,靈堂內(nèi)的尸體忽然破棺而出滋早,到底是詐尸還是另有隱情,我是刑警寧澤砌们,帶...
    沈念sama閱讀 35,428評(píng)論 5 343
  • 正文 年R本政府宣布杆麸,位于F島的核電站,受9級(jí)特大地震影響浪感,放射性物質(zhì)發(fā)生泄漏昔头。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,022評(píng)論 3 326
  • 文/蒙蒙 一影兽、第九天 我趴在偏房一處隱蔽的房頂上張望揭斧。 院中可真熱鬧,春花似錦峻堰、人聲如沸讹开。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,672評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽萧吠。三九已至,卻和暖如春桐筏,著一層夾襖步出監(jiān)牢的瞬間纸型,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,826評(píng)論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留狰腌,地道東北人除破。 一個(gè)月前我還...
    沈念sama閱讀 47,734評(píng)論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像琼腔,于是被迫代替她去往敵國和親瑰枫。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,619評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

  • Swift1> Swift和OC的區(qū)別1.1> Swift沒有地址/指針的概念1.2> 泛型1.3> 類型嚴(yán)謹(jǐn) 對(duì)...
    cosWriter閱讀 11,097評(píng)論 1 32
  • 最近統(tǒng)一整理了一下ios中屬性和關(guān)鍵詞的一些知識(shí)點(diǎn)丹莲,這些問題不管是面試題還是面試官都是經(jīng)常會(huì)問到的光坝,很多人都是會(huì)用...
    天遙love閱讀 1,319評(píng)論 0 4
  • 屬性修飾符簡述 ios5之前是MRC,內(nèi)存需要程序員進(jìn)行管理甥材,ios5之后是ARC盯另,除非特殊情況,比如C框架或者循...
    咖啡綠茶1991閱讀 733評(píng)論 0 2
  • 1.設(shè)計(jì)模式是什么? 你知道哪些設(shè)計(jì)模式叠萍,并簡要敘述芝发?設(shè)計(jì)模式是一種編碼經(jīng)驗(yàn),就是用比較成熟的邏輯去處理某一種類型...
    龍飝閱讀 2,148評(píng)論 0 12