iOS 一個(gè)@property就夠了

@property是什么

@Property是聲明屬性的語(yǔ)法,它可以快速方便的為實(shí)例變量創(chuàng)建存取器昌腰,并允許我們通過(guò)點(diǎn)語(yǔ)法使用存取器。
存取器(accessor):指用于獲取和設(shè)置實(shí)例變量的方法棒口。用于獲取實(shí)例變量值的存取器是getter尚猿,用于設(shè)置實(shí)例變量值的存取器是setter信姓。

@property 后面可以有哪些修飾符

@property有10種屬性修飾符可分為三大類阁谆。
一.原子性
1.atomic(默認(rèn)):
a.atomic意為操作是原子的往核,意味著只有一個(gè)線程訪問(wèn)實(shí)例變量蜂奸。
b.atomic是線程安全的犁苏,至少在當(dāng)前的存取器上是安全的。
c.因?yàn)楸容^影響效率扩所,在非ARC編譯環(huán)境下围详,需要設(shè)置訪問(wèn)鎖來(lái)保證對(duì)該變量進(jìn)行正確的get/set,所以不常用祖屏。

2.nonatomic:
a.nonatomic跟atomic剛好相反助赞。表示非原子的,可以被多個(gè)線程訪問(wèn)赐劣。
b.它是非線程安全型嫉拐,訪問(wèn)速度快。
c.但不能保證在多線程環(huán)境下的安全性魁兼,當(dāng)兩個(gè)不同的線程對(duì)其訪問(wèn)時(shí)婉徘,容易失控。

總結(jié):atomic和nonatomic用來(lái)決定編譯器生成的getter和setter是否為原子操作咐汞。在多線程環(huán)境下盖呼,原子操作是必要的,否則有可能引起錯(cuò)誤的結(jié)果化撕。加了atomic几晤,setter函數(shù)會(huì)變成下面這樣:

if (property != newValue) { 
    [property release]; 
    property = [newValue retain]; 
}

二.存取器控制
3.readwrite(默認(rèn)):readwrite是默認(rèn)值,表示該屬性同時(shí)擁有setter和getter植阴。
4.readonly: readonly表示只有g(shù)etter沒(méi)有setter蟹瘾。
三. 內(nèi)存管理
5.assign(默認(rèn)):
a.簡(jiǎn)單賦值圾浅,不更改索引計(jì)數(shù)。
假設(shè)你用malloc分配了一塊內(nèi)存憾朴,并且把它的地址賦值給了指針a狸捕,后來(lái)你希望指針b也共享這塊內(nèi)存,于是你又把a(bǔ)賦值給(assign)了b众雷。此時(shí)a 和b指向同一塊內(nèi)存灸拍,請(qǐng)問(wèn)當(dāng)a不再需要這塊內(nèi)存,能否直接釋放它砾省?答案是否定的鸡岗,因?yàn)閍并不知道b是否還在使用這塊內(nèi)存,如果a釋放了编兄,那么b在使用這塊內(nèi)存的時(shí)候會(huì)引起程序crash掉轩性。
b.適用簡(jiǎn)單數(shù)據(jù)類型,如int翻诉、float炮姨、double和NSInteger,CGFloat等表示單純的復(fù)制碰煌。還包括不存在所有權(quán)關(guān)系的對(duì)象舒岸,比如常見(jiàn)的delegate。

  1. copy
    用于非共享內(nèi)存時(shí)芦圾,每個(gè)指針有自己的內(nèi)存空間蛾派。也就是說(shuō)實(shí)例變量是對(duì)傳入對(duì)象的副本擁有所有權(quán),而非對(duì)象本身个少。故修改copy的變量洪乍,對(duì)其他變無(wú)影響。
    7.strong
    a.ARC中默認(rèn)屬性夜焦,等于非ARC中的retain
    b.實(shí)例變量對(duì)傳入的對(duì)象要有所有權(quán)關(guān)系壳澳,即強(qiáng)引用。strong跟retain的意思相同并產(chǎn)生相同的代碼茫经,但是語(yǔ)意上更好更能體現(xiàn)對(duì)象的關(guān)系巷波。
    舉個(gè)例子,當(dāng)我們把指向一只風(fēng)箏的變量聲明為strong時(shí)卸伞,此時(shí)抹镊,你就擁有控制這只風(fēng)箏的線,假如此時(shí)有五個(gè)人同時(shí)控制這只風(fēng)箏(即這只風(fēng)箏對(duì)象有三個(gè)strong類型的變量指向它)荤傲,那么只有一種情況垮耳,這只風(fēng)箏才會(huì)掙脫掉線的束縛:這三個(gè)人都放掉手中的線,(release掉)
    8.weak
    a.assign 相對(duì)應(yīng)
    b.用于IBOutlets,如,UIViewController的子類终佛,即一般的控件俊嗽。
    c.在setter方法中,需要對(duì)傳入的對(duì)象不進(jìn)行引用計(jì)數(shù)加1的操作铃彰。
    簡(jiǎn)單來(lái)說(shuō)乌询,就是對(duì)傳入的對(duì)象沒(méi)有所有權(quán),當(dāng)該對(duì)象引用計(jì)數(shù)為0時(shí)豌研,即該對(duì)象被釋放后,用weak聲明的實(shí)例變量指向nil唬党,即實(shí)例變量的值為0鹃共。
    繼續(xù)上面的例子,當(dāng)我們把指向一只風(fēng)箏的變量聲明為weak時(shí)驶拱,此時(shí)霜浴,就像站在旁邊看風(fēng)箏的觀眾們一樣,當(dāng)上面的三個(gè)人還握著手中的線時(shí)蓝纲,他們只能看到風(fēng)箏阴孟,并不能控制它,他們能做的只能是用手指指向風(fēng)箏税迷,并大喊永丝,“看,那只風(fēng)箏飛得真高箭养!”慕嚷,然而,當(dāng)上面的三個(gè)人把手中的線都放掉時(shí)毕泌,此時(shí)喝检,風(fēng)箏飛走了,看不見(jiàn)了撼泛,不管有再多的觀眾挠说,他們?cè)僖部床坏斤L(fēng)箏了,這個(gè)故事告訴我們一個(gè)道理:當(dāng)strong類型的指針被釋放掉之后愿题,所有的指向同一個(gè)對(duì)象的weak指針都會(huì)被清零损俭。
    9.retain:
    a.在setter方法中,需要對(duì)傳入的對(duì)象進(jìn)行引用計(jì)數(shù)加1的操作抠忘。
    簡(jiǎn)單來(lái)說(shuō)撩炊,就是對(duì)傳入的對(duì)象擁有所有權(quán),只要對(duì)該對(duì)象擁有所有權(quán)崎脉,該對(duì)象就不會(huì)被釋放拧咳。
    b.與strong相對(duì)應(yīng),使用了引用計(jì)數(shù)囚灼,retain+1,release -1;當(dāng)引用 計(jì)數(shù)為0時(shí)骆膝,dealloc會(huì)被調(diào)用祭衩,內(nèi)存被釋放
    10.unsafe_unretauined
    用在ARC編譯環(huán)境下,在此環(huán)境下阅签,與assign相似掐暮。它只是告訴ARC如何正確地調(diào)用聲明為unsafe_unretauined變量的retain和release
屬性相關(guān)問(wèn)題

1.什么情況使用 weak 關(guān)鍵字,相比 assign 有什么不同政钟?
a.在 ARC 中,在有可能出現(xiàn)循環(huán)引用的時(shí)候,往往要通過(guò)讓其中一端使用 weak 來(lái)解決,比如: delegate 代理屬性
b.自身已經(jīng)對(duì)它進(jìn)行一次強(qiáng)引用,沒(méi)有必要再?gòu)?qiáng)引用一次,此時(shí)也會(huì)使用 weak,自定義 IBOutlet 控件屬性一般也使用 weak路克;當(dāng)然,也可以使用strong养交。
c.weak 此特質(zhì)表明該屬性定義了一種“非擁有關(guān)系” (nonowning relationship)精算。為這種屬性設(shè)置新值時(shí),設(shè)置方法既不保留新值碎连,也不釋放舊值灰羽。此特質(zhì)同assign類似,然而在屬性所指的對(duì)象遭到摧毀時(shí)鱼辙,屬性值也會(huì)清空(nil out)廉嚼。而 assign 的“設(shè)置方法”只會(huì)執(zhí)行針對(duì)“純量類型” (scalar type,例如 CGFloat 或 NSlnteger 等)的簡(jiǎn)單賦值操作倒戏。
d.assigin 可以用非 OC 對(duì)象,而 weak 必須用于 OC 對(duì)象
2.怎么用 copy 關(guān)鍵字怠噪?
這里有一個(gè)鏈接講述的比較深入全面
iOS中關(guān)鍵字copy與mutableCopy的詳解,看我你就都懂了
3.如何讓自己的類用 copy 修飾符峭梳?如何重寫(xiě)帶 copy 關(guān)鍵字的 setter?
繼續(xù)鏈接了:
如何讓自己的類用 copy 修飾符舰绘?如何重寫(xiě)帶 copy 關(guān)鍵字的 setter?

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末葱椭,一起剝皮案震驚了整個(gè)濱河市捂寿,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌孵运,老刑警劉巖秦陋,帶你破解...
    沈念sama閱讀 206,214評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異治笨,居然都是意外死亡驳概,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,307評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門旷赖,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)顺又,“玉大人,你說(shuō)我怎么就攤上這事等孵≈烧眨” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 152,543評(píng)論 0 341
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)果录。 經(jīng)常有香客問(wèn)我上枕,道長(zhǎng),這世上最難降的妖魔是什么弱恒? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,221評(píng)論 1 279
  • 正文 為了忘掉前任辨萍,我火速辦了婚禮,結(jié)果婚禮上返弹,老公的妹妹穿的比我還像新娘锈玉。我一直安慰自己,他們只是感情好义起,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,224評(píng)論 5 371
  • 文/花漫 我一把揭開(kāi)白布嘲玫。 她就那樣靜靜地躺著,像睡著了一般并扇。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上抡诞,一...
    開(kāi)封第一講書(shū)人閱讀 49,007評(píng)論 1 284
  • 那天穷蛹,我揣著相機(jī)與錄音,去河邊找鬼昼汗。 笑死肴熏,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的顷窒。 我是一名探鬼主播蛙吏,決...
    沈念sama閱讀 38,313評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼鞋吉!你這毒婦竟也來(lái)了鸦做?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 36,956評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤谓着,失蹤者是張志新(化名)和其女友劉穎泼诱,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體赊锚,經(jīng)...
    沈念sama閱讀 43,441評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡治筒,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,925評(píng)論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了舷蒲。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片耸袜。...
    茶點(diǎn)故事閱讀 38,018評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖牲平,靈堂內(nèi)的尸體忽然破棺而出堤框,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 33,685評(píng)論 4 322
  • 正文 年R本政府宣布胰锌,位于F島的核電站骗绕,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏资昧。R本人自食惡果不足惜酬土,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,234評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望格带。 院中可真熱鬧撤缴,春花似錦、人聲如沸叽唱。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,240評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)棺亭。三九已至虎眨,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間镶摘,已是汗流浹背嗽桩。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,464評(píng)論 1 261
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留凄敢,地道東北人碌冶。 一個(gè)月前我還...
    沈念sama閱讀 45,467評(píng)論 2 352
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像涝缝,于是被迫代替她去往敵國(guó)和親扑庞。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,762評(píng)論 2 345

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