Effective-OC 2.0

OC通過一套全新的語法,在C語言的基礎(chǔ)上添加了面向?qū)ο蟮奶匦浴?br> 消息結(jié)果與函數(shù)調(diào)用區(qū)別在于:使用消息結(jié)構(gòu)的語言,其運(yùn)行時(shí)執(zhí)行的代碼由運(yùn)行環(huán)境來決定炉旷;而使用函數(shù)調(diào)用的語言,則由編譯器來決定。(函數(shù)調(diào)用的方式也提供了動(dòng)態(tài)綁定窘行,那就是多態(tài))
編譯期沒有計(jì)算偏移量饥追,運(yùn)行時(shí)把每個(gè)類加載進(jìn)內(nèi)存,每個(gè)屬性和方法都存在于映射表中罐盔。正是因?yàn)檫@個(gè)機(jī)制但绕,所以分類和運(yùn)行時(shí)編程才誕生。

UIAlertView增加參數(shù)可以通過翘骂,運(yùn)行時(shí)關(guān)聯(lián)屬性來達(dá)到目的壁熄。(變量或者block)
但是這種不好,最好還是用繼承的方式增加屬性碳竟。

第四條:少用預(yù)處理指令

static const NSTimeInterval kAnimationDuration = 0.3;

類全局變量的static修飾符作用域是編譯單元內(nèi);不加狸臣,編譯器為他建一個(gè)外部符號(hào)莹桅,另一個(gè)編譯單元同名會(huì)沖突。實(shí)際上static+const烛亦,編譯器不會(huì)建符號(hào)诈泼,直接替換。
函數(shù)內(nèi)的static作用域在函數(shù)內(nèi)煤禽,但是存在于全局變量區(qū)會(huì)記錄上次值铐达。
類中的static函數(shù)只能本類調(diào)用,所以不會(huì)生成符號(hào)表檬果,利于反編譯瓮孙。

作用域?yàn)檎麄€(gè)工程的全局符號(hào)

// EOCAnimatedView.h
extern const NSTimeInterval EOCAnimatedViewAnimationDuration;
// EOCAnimatedView.m
const NSTimeInterval EOCAnimatedViewAnimationDuration = 0.3;

第五條:枚舉的善用
NS_ENUM 全部情況
NS_OPTIONS 各種選項(xiàng),可以自由組合
枚舉用switch進(jìn)行分之判斷的時(shí)候选脊,別用default分之杭抠。這樣的話,增加一個(gè)狀態(tài)恳啥,編譯器會(huì)報(bào)警告偏灿。

第十二條:消息轉(zhuǎn)發(fā)機(jī)制
方法列表找不到

+ (BOOL)resolveInstanceMethod:(SEL)selector
+ (BOOL)resolveClassMethod:(SEL)selector

選擇其他接受者
- (id)forwardingTargetForSelector:(SEL)selector

轉(zhuǎn)發(fā)其他接受者
- (void)forwardInvocation:(NSInvocation*)invocation

第二十七條:匿名類隱藏實(shí)現(xiàn)細(xì)節(jié)
頭文件中引入了C++文件,會(huì)造成這個(gè)類被編譯成C++文件钝的。如果別人再引入這個(gè)文件翁垂,影響的范圍會(huì)很大。
所以引入C++文件的時(shí)候硝桩,把他放在.m文件中沿猜,這樣編譯的時(shí)候就只會(huì)影響自身。
頭文件的屬性只讀亿柑,匿名類可以修改成可寫邢疙。

對象關(guān)聯(lián)
把對象本身當(dāng)做字典,把關(guān)聯(lián)到對象的屬性理解為key。但是這個(gè)key是不透明的指針疟游,后面如果需要取出這個(gè)key的值呼畸,我們需要用到這個(gè)key,所以把key定義為靜態(tài)全局變量颁虐。
- (void)setCyj:(NSString *)cyj
{
objc_setAssociatedObject(self,@selector(cyj),cyj,OBJC_ASSOCIATION_COPY_NONATOMIC);
//關(guān)聯(lián)的key是getter方法的消息蛮原,所以getter方式的key可以直接是cmd
}
- (NSString *)cyj
{
return objc_getAssociatedObject(self, _cmd);
}

GCD
1、可以用串行隊(duì)列代替互斥鎖

_syncQueue = dispatch_queue_create("com.effectiveobjectivec.syncQueue", NULL);

- (NSString*)someString {
     __block NSString *localSomeString;
     dispatch_sync(_syncQueue, ^{
          localSomeString = _someString;
     });
     return localSomeString;
}
- (void)setSomeString:(NSString*)someString {
     dispatch_sync(_syncQueue, ^{
          _someString = someString;
     });
}

寫操作的可以用同步或者異步另绩,但是異步會(huì)是copy一份block內(nèi)容儒陨,所以在copy的消耗和執(zhí)行時(shí)間的消耗之間選擇。

2笋籽、并行隊(duì)列

_syncQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);

如果需要隊(duì)列元素單獨(dú)執(zhí)行蹦漠,可以使用柵欄

void dispatch_barrier_async(dispatch_queue_t queue,dispatch_block_t block);
void dispatch_barrier_sync(dispatch_queue_t queue,dispatch_block_t block);

3、GCD 比 performSelector 好车海,因?yàn)閜erformSelector 傳遞的參數(shù)很局限笛园,而且ARC內(nèi)存釋放也做不到。

dispatch_time_t time = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(5.0 * NSEC_PER_SEC));
dispatch_after(time, dispatch_get_main_queue(), ^(void){
     [self doSomething];
});

4侍芝、GCD 和 操作隊(duì)列
GCD是純C的API研铆,操作隊(duì)列是在GCD上封裝的OC。
操作隊(duì)列好處:1.可以取消某個(gè)操作州叠。2.指定元素之間的依賴關(guān)系棵红。3.KVO監(jiān)測NSOperation的屬性。4.指定優(yōu)先級(jí)咧栗。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末逆甜,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子楼熄,更是在濱河造成了極大的恐慌忆绰,老刑警劉巖,帶你破解...
    沈念sama閱讀 223,126評論 6 520
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件可岂,死亡現(xiàn)場離奇詭異错敢,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)缕粹,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,421評論 3 400
  • 文/潘曉璐 我一進(jìn)店門稚茅,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人平斩,你說我怎么就攤上這事亚享。” “怎么了绘面?”我有些...
    開封第一講書人閱讀 169,941評論 0 366
  • 文/不壞的土叔 我叫張陵欺税,是天一觀的道長侈沪。 經(jīng)常有香客問我,道長晚凿,這世上最難降的妖魔是什么亭罪? 我笑而不...
    開封第一講書人閱讀 60,294評論 1 300
  • 正文 為了忘掉前任渴肉,我火速辦了婚禮衅枫,結(jié)果婚禮上漓糙,老公的妹妹穿的比我還像新娘阳欲。我一直安慰自己,他們只是感情好刁卜,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,295評論 6 398
  • 文/花漫 我一把揭開白布两芳。 她就那樣靜靜地躺著驯鳖,像睡著了一般肆氓。 火紅的嫁衣襯著肌膚如雪袍祖。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,874評論 1 314
  • 那天做院,我揣著相機(jī)與錄音盲泛,去河邊找鬼。 笑死键耕,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的柑营。 我是一名探鬼主播屈雄,決...
    沈念sama閱讀 41,285評論 3 424
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼官套!你這毒婦竟也來了酒奶?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 40,249評論 0 277
  • 序言:老撾萬榮一對情侶失蹤奶赔,失蹤者是張志新(化名)和其女友劉穎惋嚎,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體站刑,經(jīng)...
    沈念sama閱讀 46,760評論 1 321
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡另伍,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,840評論 3 343
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了绞旅。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片摆尝。...
    茶點(diǎn)故事閱讀 40,973評論 1 354
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖因悲,靈堂內(nèi)的尸體忽然破棺而出堕汞,到底是詐尸還是另有隱情,我是刑警寧澤晃琳,帶...
    沈念sama閱讀 36,631評論 5 351
  • 正文 年R本政府宣布讯检,位于F島的核電站琐鲁,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏人灼。R本人自食惡果不足惜围段,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,315評論 3 336
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望挡毅。 院中可真熱鬧蒜撮,春花似錦、人聲如沸跪呈。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,797評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽耗绿。三九已至苹支,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間误阻,已是汗流浹背债蜜。 一陣腳步聲響...
    開封第一講書人閱讀 33,926評論 1 275
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留究反,地道東北人寻定。 一個(gè)月前我還...
    沈念sama閱讀 49,431評論 3 379
  • 正文 我出身青樓,卻偏偏與公主長得像精耐,于是被迫代替她去往敵國和親狼速。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,982評論 2 361

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