<Effective Objective-C 2.0> 隨筆

Effective Objective-C 2.0 隨筆
----
理解"類對象用意"

IMG_0468.JPG

每個對象結(jié)構(gòu)體的首個成員是Classl類的變量拗胜。該變量定義了對象所屬的類董瞻,通常是"is a"指針。例如NSString的對象的isa指針就指向NSString。
Class對象的首個變量也是isa指針,說明Class本質(zhì)是OC對象。Class結(jié)構(gòu)體里還有個super class的變量用于定義本類的超類盗似。而Class的isa則指向元類(metaclass),用來表述對象本身所具備的元數(shù)據(jù)翁涤,"類方法"就定義與此處桥言,因為這些方法可以理解成類對象的實力方法萌踱,每個類僅有一個"類對象"葵礼,而每個"類對象"僅有一個與之相關(guān)的"元類"号阿。
-------------------------
ARC中autorelease的優(yōu)化


IMG_0469.JPG

ARC會優(yōu)化autorelease后緊跟retain的操作,當(dāng)方法中返回autorelease對象時鸳粉,會先執(zhí)行一個特殊的函數(shù)objc_autoreleaseReturnValue扔涧。此函數(shù)會檢視當(dāng)前方法返回后即將要執(zhí)行的那段代碼。若發(fā)現(xiàn)需要retain届谈,則設(shè)置全局數(shù)據(jù)結(jié)構(gòu)中的一個標(biāo)志位枯夜,而不執(zhí)行autorelease。同理艰山,如果方法返回一個autorelease的對象湖雹,則不需要直接retain,而是改為執(zhí)行objc_retainAutoreleaseReturnValue函數(shù)曙搬。此函數(shù)檢測剛才設(shè)置的標(biāo)志位摔吏,若已經(jīng)置位,就不執(zhí)行retain纵装。設(shè)置和監(jiān)測標(biāo)志位要比autorelease和retain更快征讲。

------------
全局block,棧block橡娄,堆block
全局Block不會捕捉任何狀態(tài)诗箍,運行時也無需有狀態(tài)來參與,block所使用的整個內(nèi)存區(qū)域挽唉,在變異期已經(jīng)完全確定滤祖。因此全局block可以聲明在全局內(nèi)存里,而不需要在每次用到的時候于棧中創(chuàng)建瓶籽。另外匠童,全局block的copy操作是個空操作,因為全局block絕不可能為系統(tǒng)所回收棘劣。這種block實際上相當(dāng)于單例俏让。

-------------
不要使用dispatch_get_current_queue


IMG_0470.JPG

當(dāng)在隊列B中,獲取當(dāng)前隊列會取得隊列B茬暇,基于這個條件首昔,當(dāng)你此時同步派發(fā)一個block到隊列A,就會造成死鎖糙俗,因為隊列B是從屬于隊列A的勒奇。
所以應(yīng)使用下面的方法:


IMG_0471.JPG

假如根據(jù)制定的鍵獲取不到關(guān)聯(lián)數(shù)據(jù),那么系統(tǒng)就會沿著層級體系向上查找巧骚,直至找到數(shù)據(jù)或到達根隊列為止赊颠。因此可以知道當(dāng)前隊列是否處于某個特定隊列的層級下格二,可以直接調(diào)用,而不需要派發(fā)導(dǎo)致死鎖竣蹦。

----------------
initialize和load
load方法并不遵從繼承規(guī)則顶猜。如果某個類沒有實現(xiàn)load方法,不管其各級超類是否實現(xiàn)load痘括,系統(tǒng)都不會調(diào)用长窄。當(dāng)分類和類里都有l(wèi)oad,兩種代碼都會調(diào)用纲菌,類的比分類的先執(zhí)行挠日。
initialize為惰性執(zhí)行,當(dāng)程序用到相關(guān)的類時翰舌,才會執(zhí)行嚣潜。否則一直不會被調(diào)用。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末椅贱,一起剝皮案震驚了整個濱河市懂算,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌夜涕,老刑警劉巖犯犁,帶你破解...
    沈念sama閱讀 221,635評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異女器,居然都是意外死亡酸役,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,543評論 3 399
  • 文/潘曉璐 我一進店門驾胆,熙熙樓的掌柜王于貴愁眉苦臉地迎上來涣澡,“玉大人,你說我怎么就攤上這事丧诺∪牍穑” “怎么了?”我有些...
    開封第一講書人閱讀 168,083評論 0 360
  • 文/不壞的土叔 我叫張陵驳阎,是天一觀的道長抗愁。 經(jīng)常有香客問我,道長呵晚,這世上最難降的妖魔是什么蜘腌? 我笑而不...
    開封第一講書人閱讀 59,640評論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮饵隙,結(jié)果婚禮上撮珠,老公的妹妹穿的比我還像新娘。我一直安慰自己金矛,他們只是感情好芯急,可當(dāng)我...
    茶點故事閱讀 68,640評論 6 397
  • 文/花漫 我一把揭開白布勺届。 她就那樣靜靜地躺著,像睡著了一般娶耍。 火紅的嫁衣襯著肌膚如雪免姿。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,262評論 1 308
  • 那天伺绽,我揣著相機與錄音养泡,去河邊找鬼嗜湃。 笑死奈应,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的购披。 我是一名探鬼主播杖挣,決...
    沈念sama閱讀 40,833評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼刚陡!你這毒婦竟也來了惩妇?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,736評論 0 276
  • 序言:老撾萬榮一對情侶失蹤筐乳,失蹤者是張志新(化名)和其女友劉穎歌殃,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體蝙云,經(jīng)...
    沈念sama閱讀 46,280評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡氓皱,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,369評論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了勃刨。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片波材。...
    茶點故事閱讀 40,503評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖身隐,靈堂內(nèi)的尸體忽然破棺而出廷区,到底是詐尸還是另有隱情,我是刑警寧澤贾铝,帶...
    沈念sama閱讀 36,185評論 5 350
  • 正文 年R本政府宣布隙轻,位于F島的核電站,受9級特大地震影響垢揩,放射性物質(zhì)發(fā)生泄漏玖绿。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,870評論 3 333
  • 文/蒙蒙 一水孩、第九天 我趴在偏房一處隱蔽的房頂上張望镰矿。 院中可真熱鬧,春花似錦俘种、人聲如沸秤标。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,340評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽苍姜。三九已至牢酵,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間衙猪,已是汗流浹背馍乙。 一陣腳步聲響...
    開封第一講書人閱讀 33,460評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留垫释,地道東北人丝格。 一個月前我還...
    沈念sama閱讀 48,909評論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像棵譬,于是被迫代替她去往敵國和親显蝌。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,512評論 2 359

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