Effective Objective-C 2.0 閱讀筆記<三>

第五章 內(nèi)存管理

1.ARC并不會調(diào)用retainrelease等方法览闰,而是直接調(diào)用其底層C語言版本objc_retain等赫模,所以ARC沒有普通的OC消息派發(fā)機(jī)制。

2.如果setter方法像下面這樣寫丐吓,當(dāng)新值和舊值相同時就程序就會崩潰浅悉。


-(void)setObject:(id)object{
    [_object release];
    _object=[object retain];
}

3.ARC中的命名規(guī)則:如果方法名以allocnew汰蜘、copy仇冯、mutableCopy開頭,則返回對象歸調(diào)用者所有族操,否則返回的對象會自動釋放苛坚。

4.dealloc方法里要釋放指向其他對象的引用,取消鍵值觀測(KVO)和NSNotificationCenter通知色难,不要在這里執(zhí)行異步任務(wù)或應(yīng)該在正常狀態(tài)下執(zhí)行的任務(wù)泼舱,因?yàn)檫@是的對象已經(jīng)處于正在回收狀態(tài)了。

5.ARC默認(rèn)不生成安全處理異常的代碼枷莉,設(shè)置-fobjc-arc-exceptions標(biāo)志后可以開啟娇昙,不過會導(dǎo)致應(yīng)用程序變大,效率變低笤妙。

6.unsafe_unretainweak都可以用來消除循環(huán)引用冒掌,區(qū)別是前者在引用移除后仍然指向已經(jīng)回收的對象,后者則會自動設(shè)為nil蹲盘,所以使用weak會安全一點(diǎn)股毫,因?yàn)橄?code>nil發(fā)送消息不會報(bào)錯。

7.利用自動釋放池可以避免內(nèi)存峰值的出現(xiàn)召衔。

第六章 塊與大中樞派發(fā)

1.下圖是塊的內(nèi)部結(jié)構(gòu):

1.jpg

上圖中首個變量是個isa指針铃诬,所以塊本身是一個對象。那么塊和普通函數(shù)有什么區(qū)別呢苍凛?除了塊是個對象外趣席,其實(shí)最大的區(qū)別就是塊比函數(shù)多了個上下文環(huán)境,塊內(nèi)部可以調(diào)用外部的變量醇蝴,對應(yīng)上圖的variables宣肚,而descriptor內(nèi)部則會對捕獲的變量進(jìn)行管理。

2.塊分為全局塊NSConcreteGlobalBlock悠栓、棧塊NSConcreteStackBlock钉寝、堆塊NSConcreteMallocBlock,在ARC中只有全局塊和堆塊了闸迷。

3.利用typedef創(chuàng)建塊,然后將handler塊作為參數(shù)傳給方法俘枫,以降低代碼分散程度腥沽。這種方法編寫類的時候特別要注意塊的保留環(huán),記得要把塊在適當(dāng)時機(jī)釋放掉鸠蚪,解除保留環(huán)今阳。在AFNetworking中师溅,是把所有competition塊保存在字典中,當(dāng)請求結(jié)束時盾舌,再移除墓臭,其他開源庫的做法也都大同小異。

4.GCD和NSOperationQueue:前者是純C的API妖谴,且更加輕量窿锉,后者是Objective-C對象,可以取消操作膝舅、設(shè)置依賴關(guān)系嗡载、同一隊(duì)列中各操作的優(yōu)先級設(shè)置。

5.不要使用dispatch_get_current_queue仍稀,因?yàn)橥鵄線程里面又有B線程洼滚,所以在B中檢測當(dāng)前線程就會產(chǎn)生歧義。

第七章 系統(tǒng)框架

1.多用塊枚舉技潘,少用for循環(huán)遥巴,另外也可以使用for in這種快速遍歷的方法。

2.loadinitialize里面的代碼一定要精簡享幽。不要在里面調(diào)用其他類的方法铲掐,因?yàn)槎鄠€類之間執(zhí)行load的順序是不確定的,而且load不參與繼承機(jī)制琉闪。initialize會在類被第一次調(diào)用時執(zhí)行一次迹炼,和load一樣,不要再里面調(diào)用其他類的方法颠毙。

3.NSTimer會保留目標(biāo)對象斯入,所以很容易造成循環(huán)引用,調(diào)用invalidate方法可以使timer失效蛀蜜,但是別把這項(xiàng)工作交給調(diào)用者刻两,你永遠(yuǎn)無法保證調(diào)用者一定會調(diào)用invalidate

結(jié)語

這本書其實(shí)早就看完了滴某,寫這幾篇博客時磅摹,這本書差不多看了快三遍了,里面很多知識點(diǎn)對提升編程質(zhì)量還是很有幫助的霎奢,在看一些開源iOS框架的時候户誓,很多細(xì)節(jié)上的處理都能在這本書上找到解釋。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末幕侠,一起剝皮案震驚了整個濱河市帝美,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌晤硕,老刑警劉巖悼潭,帶你破解...
    沈念sama閱讀 210,914評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件庇忌,死亡現(xiàn)場離奇詭異,居然都是意外死亡舰褪,警方通過查閱死者的電腦和手機(jī)皆疹,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,935評論 2 383
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來占拍,“玉大人略就,你說我怎么就攤上這事∷⑾玻” “怎么了残制?”我有些...
    開封第一講書人閱讀 156,531評論 0 345
  • 文/不壞的土叔 我叫張陵,是天一觀的道長掖疮。 經(jīng)常有香客問我初茶,道長,這世上最難降的妖魔是什么浊闪? 我笑而不...
    開封第一講書人閱讀 56,309評論 1 282
  • 正文 為了忘掉前任恼布,我火速辦了婚禮,結(jié)果婚禮上搁宾,老公的妹妹穿的比我還像新娘折汞。我一直安慰自己,他們只是感情好盖腿,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,381評論 5 384
  • 文/花漫 我一把揭開白布爽待。 她就那樣靜靜地躺著,像睡著了一般翩腐。 火紅的嫁衣襯著肌膚如雪鸟款。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,730評論 1 289
  • 那天茂卦,我揣著相機(jī)與錄音何什,去河邊找鬼。 笑死等龙,一個胖子當(dāng)著我的面吹牛处渣,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播蛛砰,決...
    沈念sama閱讀 38,882評論 3 404
  • 文/蒼蘭香墨 我猛地睜開眼罐栈,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了泥畅?” 一聲冷哼從身側(cè)響起悠瞬,我...
    開封第一講書人閱讀 37,643評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后浅妆,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,095評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡障癌,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,448評論 2 325
  • 正文 我和宋清朗相戀三年凌外,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片涛浙。...
    茶點(diǎn)故事閱讀 38,566評論 1 339
  • 序言:一個原本活蹦亂跳的男人離奇死亡康辑,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出轿亮,到底是詐尸還是另有隱情疮薇,我是刑警寧澤,帶...
    沈念sama閱讀 34,253評論 4 328
  • 正文 年R本政府宣布我注,位于F島的核電站按咒,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏但骨。R本人自食惡果不足惜励七,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,829評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望奔缠。 院中可真熱鬧掠抬,春花似錦、人聲如沸校哎。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,715評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽闷哆。三九已至腰奋,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間阳准,已是汗流浹背氛堕。 一陣腳步聲響...
    開封第一講書人閱讀 31,945評論 1 264
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留野蝇,地道東北人讼稚。 一個月前我還...
    沈念sama閱讀 46,248評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像绕沈,于是被迫代替她去往敵國和親锐想。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,440評論 2 348

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