回顧日記2-關(guān)鍵字,Block和代理的區(qū)別

readwrite,readonly,assign,retain,copy,nonatomic,atomic,strong,weak屬性的作用分別是什么。

關(guān)鍵字注釋

readwrite此標(biāo)記說明屬性會被當(dāng)成讀寫的榜掌,這也是默認(rèn)屬性只厘。

readonly此標(biāo)記說明屬性只可以讀,也就是不能設(shè)置祭埂,可以獲取面氓。

assign不會使引用計數(shù)加1,也就是直接賦值沟堡。

retain會使引用計數(shù)加1侧但。

copy建立一個索引計數(shù)為1的對象,在賦值時使用傳入值的一份拷貝航罗。

nonatomic非原子性訪問禀横,多線程并發(fā)訪問會提高性能。

atomic原子性訪問粥血。

strong打開ARC時才會使用柏锄,相當(dāng)于retain。

weak打開ARC時才會使用复亏,相當(dāng)于assign趾娃,可以把對應(yīng)的指針變量置為nil。

為什么代理要用weak缔御?

首先明白什么情況使用 weak 關(guān)鍵字?

在 ARC 中,在有可能出現(xiàn)循環(huán)引用的時候,往往要通過讓其中一端使用 weak 來解決

delegate 代理屬性,代理屬性也可使用

assign自身已經(jīng)對它進行一次強引用,沒有必要再強引用一次,此時也會使用 weak

自定義IBOutlet 控件屬性一般也使用weak;當(dāng)然,也可以使用 strong,但是建議使用 weak

weak 在屬性所指的對象遭到摧毀時,系統(tǒng)會將 weak 修飾的屬性對象的指針指向 nil,在 OC 給 nil 發(fā)消息是不會有什么問題的;如果使用 assign 策略在屬性所指的對象遭到摧毀時,屬性對象指針還指向原來的對象,由于對象已經(jīng)被銷毀,這時候就產(chǎn)生了野指針,如果這時候在給此對象發(fā)送消息,很容造成程序奔潰assigin 可以用于修飾非 OC 對象,而 weak 必須用于 OC 對象抬闷。


block和代理的區(qū)別?

block 和 delegate 都可以通知外面。block 更輕型耕突,使用更簡單笤成,能夠直接訪問上下文,這樣類中不需要存儲臨時數(shù)據(jù)眷茁,使用 block 的代碼通常會在同一個地方炕泳,這樣讀代碼也連貫。delegate 更重一些上祈,需要實現(xiàn)接口培遵,它的方法分離開來,很多時候需要存儲一些臨時數(shù)據(jù)登刺,另外相關(guān)的代碼會被分離到各處籽腕,沒有 block 好讀。

應(yīng)該優(yōu)先使用 block塘砸。而有兩個情況可以考慮 delegate节仿。

1. 有多個相關(guān)方法。假如每個方法都設(shè)置一個 block, 這樣會更麻煩掉蔬。而 delegate 讓多個方法分成一組廊宪,只需要設(shè)置一次矾瘾,就可以多次回調(diào)瞻鹏。當(dāng)多于 3 個方法時就應(yīng)該優(yōu)先采用 delegate烤黍。

2. 為了避免循環(huán)引用嫁审,也可以使用 delegate磅废。使用 block 時稍微不注意就形成循環(huán)引用兽埃,導(dǎo)致對象釋放不了侦鹏。這種循環(huán)引用铜跑,一旦出現(xiàn)就比較難檢查出來湿右。而 delegate 的方法是分離開的荐操,并不會引用上下文芜抒,因此會更安全些。

將 block 簡單分類托启,有三種情形宅倒。

* 臨時性的,只用在棧當(dāng)中屯耸,不會存儲起來拐迁。比如數(shù)組的 foreach 遍歷,這個遍歷用到的 block 是臨時的疗绣,不會存儲起來线召。

* 需要存儲起來,但只會調(diào)用一次多矮,或者有一個完成時期缓淹。比如一個 UIView 的動畫,動畫完成之后塔逃,需要使用 block 通知外面割卖,一旦調(diào)用 block 之后,這個 block 就可以刪掉患雏。

* 需要存儲起來,可能會調(diào)用多次罢维。比如按鈕的點擊事件淹仑,假如采用 block 實現(xiàn),這種 block 就需要長期存儲肺孵,并且會調(diào)用多次匀借。調(diào)用之后,block 也不可以刪除平窘,可能還有下一次按鈕的點擊吓肋。

對于臨時性的,只在棧中使用的 block, 沒有循環(huán)引用問題瑰艘,block 會自動釋放是鬼。而只調(diào)用一次的 block肤舞,需要看內(nèi)部的實現(xiàn),正確的實現(xiàn)應(yīng)該是 block 調(diào)用之后均蜜,馬上賦值為空李剖,這樣 block 也會釋放,同樣不會循環(huán)引用囤耳。而多次調(diào)用時篙顺,block 需要長期存儲,就很容易出現(xiàn)循環(huán)引用問題充择。

Cocoa 中的 API 設(shè)計也是這樣的德玫,臨時性的,只會調(diào)用一次的椎麦,采用 block宰僧。而多次調(diào)用的,并不會使用 block铃剔。比如按鈕事件撒桨,就使用 target-action,有些庫將按鈕事件從 target-action 封裝成 block 接口, 反而容易出問題键兜。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末凤类,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子普气,更是在濱河造成了極大的恐慌谜疤,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,123評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件现诀,死亡現(xiàn)場離奇詭異夷磕,居然都是意外死亡,警方通過查閱死者的電腦和手機仔沿,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,031評論 2 384
  • 文/潘曉璐 我一進店門坐桩,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人封锉,你說我怎么就攤上這事绵跷。” “怎么了成福?”我有些...
    開封第一講書人閱讀 156,723評論 0 345
  • 文/不壞的土叔 我叫張陵碾局,是天一觀的道長。 經(jīng)常有香客問我奴艾,道長净当,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,357評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮像啼,結(jié)果婚禮上俘闯,老公的妹妹穿的比我還像新娘。我一直安慰自己埋合,他們只是感情好备徐,可當(dāng)我...
    茶點故事閱讀 65,412評論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著甚颂,像睡著了一般蜜猾。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上振诬,一...
    開封第一講書人閱讀 49,760評論 1 289
  • 那天蹭睡,我揣著相機與錄音,去河邊找鬼赶么。 笑死肩豁,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的辫呻。 我是一名探鬼主播清钥,決...
    沈念sama閱讀 38,904評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼放闺!你這毒婦竟也來了祟昭?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,672評論 0 266
  • 序言:老撾萬榮一對情侶失蹤怖侦,失蹤者是張志新(化名)和其女友劉穎篡悟,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體匾寝,經(jīng)...
    沈念sama閱讀 44,118評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡搬葬,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,456評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了艳悔。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片急凰。...
    茶點故事閱讀 38,599評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖猜年,靈堂內(nèi)的尸體忽然破棺而出香府,到底是詐尸還是另有隱情,我是刑警寧澤码倦,帶...
    沈念sama閱讀 34,264評論 4 328
  • 正文 年R本政府宣布,位于F島的核電站锭碳,受9級特大地震影響袁稽,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜擒抛,卻給世界環(huán)境...
    茶點故事閱讀 39,857評論 3 312
  • 文/蒙蒙 一推汽、第九天 我趴在偏房一處隱蔽的房頂上張望补疑。 院中可真熱鬧,春花似錦歹撒、人聲如沸莲组。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,731評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽锹杈。三九已至,卻和暖如春迈着,著一層夾襖步出監(jiān)牢的瞬間竭望,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,956評論 1 264
  • 我被黑心中介騙來泰國打工裕菠, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留咬清,地道東北人。 一個月前我還...
    沈念sama閱讀 46,286評論 2 360
  • 正文 我出身青樓奴潘,卻偏偏與公主長得像旧烧,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子画髓,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,465評論 2 348

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

  • *面試心聲:其實這些題本人都沒怎么背,但是在上海 兩周半 面了大約10家 收到差不多3個offer,總結(jié)起來就是把...
    Dove_iOS閱讀 27,130評論 30 470
  • 基礎(chǔ) 1. 為什么說Objective-C是一門動態(tài)的語言掘剪? 2. 講一下MVC和MVVM,MVP雀扶? 3. 為...
    波妞和醬豆子閱讀 3,311評論 0 46
  • 1.屬性readwrite杖小,readonly,assign愚墓,retain予权,copy,nonatomic 各是什么作...
    曾令偉閱讀 1,046評論 0 10
  • 九月初九重陽節(jié)剛剛過去浪册,趁著節(jié)日的余溫扫腺,小首傾情奉上專為老人度身定制的首都機場舒心便捷服務(wù)攻略,趕快轉(zhuǎn)發(fā)給家中長輩...
    小易車友會閱讀 9,563評論 2 1
  • 當(dāng)城市的喧囂揉碎黎明的寂靜村象,機械式的生活便井然有序的開始了笆环。每天打扮的優(yōu)雅從容出門,給自己帶上不同的微笑厚者,去...
    無名酒閱讀 393評論 0 2