iOS屬性關(guān)鍵字

以前在沒有ARC(automatic reference counting)的時候我們使用assign與retain來修飾屬性呜呐,后來引入了更安全的weak和strong來修飾屬性

assign與weak

兩者都是弱引用统阿,assign通常用于普通類型屬性(如int,NSInteger),常見的還會用于delegate對象的屬性修飾诉稍,基本上來說兩者是可以通用的。

Q:那對于delegate的屬性修飾符到底是用assign好,還是weak好呢剂娄?
分析:weak在引用的對象被釋放的時候會將delegate置為nil鸯乃,而assign修飾的delegate依然會指向原來的位置鲸阻,這樣在delegate引用的對象被釋放后,delegate就會變成野指針缨睡。在OC中你給你一個nil對象發(fā)送消息不會crash鸟悴,但是給一個對象(如:野指針)發(fā)送他不能響應(yīng)的消息是會crash的,所以總的來說weak要比assign安全一些奖年。

retain和strong

他倆都是強(qiáng)引用细诸,除了某些情況下不一樣,比如修飾block陋守,其他的時候也是可以通用的震贵。

引用簡書

結(jié)論
  • 只要不引入外部變量利赋,無論是MRC還是ARC,無論是retain還是strong修飾block猩系,block屬性都是存在全局?jǐn)?shù)據(jù)區(qū)
  • 引入外部變量時媚送,retain和strong(copy)是有區(qū)別的,
    在MRC時寇甸,block存在棧區(qū)(stack)的塘偎,因此使用的時候要注意此時的block是否還存在,以免操作了野指針而閃退拿霉。
    在ARC時吟秩,block是存在堆區(qū)(heap)的。
    (外部變量可以是局部變量友浸,也可以是一個屬性)
    總結(jié)
    所以說block的屬性修飾符應(yīng)該用strong或copy比較安全些峰尝。
    對block來說,屬性修飾符用strong或copy效果是一樣的收恢。
其他屬性關(guān)鍵字總結(jié)

1.讀寫權(quán)限:readonly,readwrite(默認(rèn))
2.原子性: atomic(默認(rèn))武学,nonatomic。
atomic讀寫線程安全伦意,但效率低火窒,也不是絕對的安全,如果修飾的是數(shù)組驮肉,那么對數(shù)組的讀寫是安全的熏矿,但如果是操作數(shù)組進(jìn)行添加移除對象,就不保證安全了离钝。
3.引用計數(shù):

  • retain/strong 引用計數(shù)加1

  • assign
    修飾基本數(shù)據(jù)類型票编,修飾對象類型時,不改變其引用計數(shù)卵渴,會產(chǎn)生野指針慧域,修飾的對象在被釋放后,assign指針仍然指向原對象內(nèi)存地址浪读,如果使用assign指針繼續(xù)訪問原對象的話昔榴,就可能會導(dǎo)致內(nèi)存泄漏或程序異常

  • weak
    不改變被修飾對象的引用計數(shù),所指對象在被釋放后碘橘,weak指針會自動置為nil
    (weak的實(shí)現(xiàn)原理是什么互订?當(dāng)引用對象銷毀是它是如何管理內(nèi)部的Hash表的?
    runTime會把對weak修飾的對象放到一個全局的哈希表中痘拆,用weak修飾的對象的內(nèi)存地址為key仰禽,weak指針為值,在對象進(jìn)行銷毀時,用通過自身地址去哈希表中查找到所有指向此對象的weak指針坟瓢,并把所有的weak指針置位nil勇边。

  • copy:分為深拷貝和淺拷貝
    淺拷貝:對內(nèi)存地址的復(fù)制犹撒,讓目標(biāo)對象指針和原對象指向同一片內(nèi)存空間會增加引用計數(shù)

    深拷貝:對對象內(nèi)容的復(fù)制折联,開辟新的內(nèi)存空間

總結(jié)
可變對象的copy和mutableCopy都是深拷貝
不可變對象的copy是淺拷貝,mutableCopy是深拷貝
copy方法返回的都是不可變對象

  • @property (nonatomic, copy) NSMutableArray * array;這樣寫有什么影響识颊?
    因?yàn)閏opy方法返回的都是不可變對象诚镰,所以array對象實(shí)際上是不可變的,如果對其進(jìn)行可變操作如添加移除對象祥款,則會造成程序crash
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末清笨,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子刃跛,更是在濱河造成了極大的恐慌抠艾,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,277評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件桨昙,死亡現(xiàn)場離奇詭異检号,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)蛙酪,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評論 3 393
  • 文/潘曉璐 我一進(jìn)店門齐苛,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人桂塞,你說我怎么就攤上這事凹蜂。” “怎么了阁危?”我有些...
    開封第一講書人閱讀 163,624評論 0 353
  • 文/不壞的土叔 我叫張陵玛痊,是天一觀的道長。 經(jīng)常有香客問我狂打,道長擂煞,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,356評論 1 293
  • 正文 為了忘掉前任菱父,我火速辦了婚禮颈娜,結(jié)果婚禮上藻丢,老公的妹妹穿的比我還像新娘排宰。我一直安慰自己,他們只是感情好搓劫,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,402評論 6 392
  • 文/花漫 我一把揭開白布粟瞬。 她就那樣靜靜地躺著同仆,像睡著了一般。 火紅的嫁衣襯著肌膚如雪裙品。 梳的紋絲不亂的頭發(fā)上俗批,一...
    開封第一講書人閱讀 51,292評論 1 301
  • 那天俗或,我揣著相機(jī)與錄音,去河邊找鬼岁忘。 笑死辛慰,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的干像。 我是一名探鬼主播帅腌,決...
    沈念sama閱讀 40,135評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼麻汰!你這毒婦竟也來了速客?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,992評論 0 275
  • 序言:老撾萬榮一對情侶失蹤五鲫,失蹤者是張志新(化名)和其女友劉穎溺职,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體位喂,經(jīng)...
    沈念sama閱讀 45,429評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡浪耘,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,636評論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了忆某。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片点待。...
    茶點(diǎn)故事閱讀 39,785評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖弃舒,靈堂內(nèi)的尸體忽然破棺而出癞埠,到底是詐尸還是另有隱情,我是刑警寧澤聋呢,帶...
    沈念sama閱讀 35,492評論 5 345
  • 正文 年R本政府宣布苗踪,位于F島的核電站,受9級特大地震影響削锰,放射性物質(zhì)發(fā)生泄漏通铲。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,092評論 3 328
  • 文/蒙蒙 一器贩、第九天 我趴在偏房一處隱蔽的房頂上張望颅夺。 院中可真熱鬧,春花似錦蛹稍、人聲如沸吧黄。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,723評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽拗慨。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間赵抢,已是汗流浹背剧蹂。 一陣腳步聲響...
    開封第一講書人閱讀 32,858評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留烦却,地道東北人宠叼。 一個月前我還...
    沈念sama閱讀 47,891評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像短绸,于是被迫代替她去往敵國和親车吹。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,713評論 2 354