編寫(xiě)高質(zhì)量iOS的52個(gè)有效方法學(xué)習(xí)筆記(1-5)

1.了解Objective-c 語(yǔ)言的起源

Objective-c與C++、Java等面向?qū)ο笳Z(yǔ)言類(lèi)似芹壕,不過(guò)很多方面有所差別。

Objective-c Java等其他對(duì)象語(yǔ)言
消息結(jié)構(gòu) 函數(shù)調(diào)用
其運(yùn)行時(shí)所應(yīng)執(zhí)行的代碼由 運(yùn)行環(huán)境來(lái)決定 編譯器決定
  • Objective-c為C語(yǔ)言添加了面向?qū)ο筇匦阅埽瞧涑虻bjective-c使用動(dòng)態(tài)綁定的消息結(jié)構(gòu),也就是說(shuō)屯阀,在運(yùn)行時(shí)才會(huì)檢查對(duì)象類(lèi)型缅帘。接收一條消息后,究竟應(yīng)執(zhí)行何種代碼难衰,由運(yùn)行環(huán)境而非編輯器決定钦无。
  • 理解C語(yǔ)言的內(nèi)存模型和指針有利于學(xué)號(hào)Objective-c

2.在類(lèi)的頭文件中盡量少的引用其他頭文件

將引入頭文件的時(shí)機(jī)盡量延后,只在確有需要時(shí)才引入盖袭,這樣就可以減少類(lèi)的使用者所徐引入的頭文件數(shù)量失暂。(盡量別在.h文件中引入其他頭文件,一方面為了減少編譯時(shí)間鳄虱,使用@class xxx弟塞,另一方面防止兩個(gè)類(lèi)互相引用)

3.多用字面量語(yǔ)法,少用與之等價(jià)的方法

字面量也叫語(yǔ)法糖拙已,好處在于縮減源代碼長(zhǎng)度决记,精簡(jiǎn),易讀倍踪。

    NSNumber *someNum = [NSNumber numberWithInt:1];
    NSNumber *somenum = @1;

    NSArray *arr = [NSArray arrayWithObjects:@"1",@"2", nil];
    NSArray *arr0 = @[@"1",@"2"];
    NSString *str = [arr objectAtIndex:1];
    NSString *str0 = arr0[1];

    NSDictionary *dic = [NSDictionary dictionaryWithObjectsAndKeys:@"value0",@"key0",@"value1",@"key1", nil];
    NSDictionary *dic0 = @{@"key0":@"value0",@"key1":@"value1"};
    NSString *dicStr = [dic objectForKey:@"key0"];
    NSString *dicStr0 = dic[@"key0"];

 * 對(duì)于數(shù)組霉涨,如果值中有nil,會(huì)有以下情況
    NSString *obj0 = @"0";
    NSString *obj1 = nil;
    NSString *obj2 = @"2";
    NSArray *arr = [NSArray arrayWithObjects:obj0,obj1,obj2, nil];
   那么arr數(shù)組里面只有一個(gè)元素obj0惭适,因?yàn)橛龅降诙€(gè)元素是nil笙瑟,就會(huì)停止后面的導(dǎo)入,且程序不會(huì)報(bào)錯(cuò)癞志,這就造成安全的隱患往枷。
   如果用語(yǔ)法糖,面對(duì)這種情況凄杯,程序會(huì)拋出異常错洁,便于查找和解決問(wèn)題。

 * 字典中也是類(lèi)似的情況

局限性:字面量語(yǔ)法有個(gè)小小的限制戒突,就是除了字符串以外屯碴,所創(chuàng)建出來(lái)的對(duì)象必須屬于Foundation框架才行。

  • 應(yīng)該使用字面量語(yǔ)法來(lái)創(chuàng)建字符串膊存,數(shù)值导而,數(shù)組忱叭,字典。與常規(guī)方法相比今艺,這么做更加簡(jiǎn)明扼要韵丑。
  • 應(yīng)該通過(guò)取下標(biāo)操作來(lái)訪問(wèn)數(shù)組下標(biāo)或者字典中的鍵所對(duì)應(yīng)的元素。
  • 用字面量語(yǔ)法創(chuàng)建數(shù)組或者字典時(shí)虚缎,若值中有nil撵彻,則會(huì)拋出異常。因此实牡,務(wù)必確保值里不含nil陌僵。

4.多用類(lèi)型常量,少用#define預(yù)處理指令

編寫(xiě)代碼時(shí)經(jīng)常要定義常量创坞,比如定義動(dòng)畫(huà)時(shí)長(zhǎng)常量

#define ANIMATION_DURATION 0.5
這種方法是可以實(shí)現(xiàn)想要的效果拾弃,但是這樣定義沒(méi)有類(lèi)型信息,不易被之后的閱讀者理解摆霉,

static const NSTimeInterval kAnicationDuration 0.5
用此方法定義的常量包含類(lèi)型信息,其好處是清楚的描述了常量的含義奔坟。如果有許多常量携栋,此種寫(xiě)法能令閱讀代碼的人更易理解其意圖。

常量的命名法:若常量局限于某個(gè)類(lèi)里面咳秉,則在前面加字母k婉支;若常量在類(lèi)之外可見(jiàn),則通常以類(lèi)名為前綴澜建。

變量一定要同時(shí)用static與const來(lái)聲明向挖。如果試圖修改const修飾符所聲明的變量,那么編譯器就會(huì)報(bào)錯(cuò)炕舵。static修飾符則意味著該變量?jī)H在此變量所在的類(lèi)中可用

如果要公開(kāi)一個(gè)常量何之,即全局常量,則這樣定義

在頭文件中聲明
extern NSString *const EOCStringConstant;
在實(shí)現(xiàn)文件中定義
NSString *const EOCStringConstant = @"value";
  • 不要用預(yù)處理指令定義常量咽筋。
  • 在.m文件中使用 static const 來(lái)定義只在本類(lèi)中使用的常量溶推。(不用為其加名稱前綴,加k)
  • 在頭文件中使用extern來(lái)聲明全局常量奸攻,并在相關(guān)實(shí)現(xiàn)文件中定義其值蒜危。(用相關(guān)類(lèi)名做前綴)

5.用枚舉標(biāo)識(shí)狀態(tài)、選項(xiàng)睹耐、狀態(tài)碼

Objective-C基于C語(yǔ)言辐赞,所以它也可以使用枚舉類(lèi)型:enum。系統(tǒng)框架中總能看到它的身影硝训,但是開(kāi)發(fā)者卻容易忽視它响委,枚舉用的好的話新思,不僅使代碼看起來(lái)更加規(guī)范,明了晃酒,而且使得程序邏輯更加清晰易讀

typedef NS_ENUM(NSUInteger,personType) {
    personTypeOne,//=0
    personTypeTwo=5,//=5
    personTypeThree//=6
};
手工指定某個(gè)枚舉成員所對(duì)應(yīng)的值表牢,不適用編譯器所分配的序號(hào)(默認(rèn)第一個(gè)為0,之后遞增1)

還有一種情況應(yīng)該使用枚舉類(lèi)型贝次,那就是定義選項(xiàng)的時(shí)候崔兴。如果這些選項(xiàng)可以互相組合,則更應(yīng)如此蛔翅。

typedef NS_OPTIONS(NSUInteger, personStatus) {
    personStatus0 = 1 << 0,//=1 0001
    personStatus1 = 1 << 1,//=2 0010
    personStatus2 = 1 << 2,//=4 0100
    personStatus3 = 1 << 3//=8  1000
};

personStatus personSta = personStatus0 | personStatus2;
NSLog(@"%ld",personSta);//打印結(jié)果 5
  • 凡是需要以按位或操作組合的枚舉都應(yīng)使用NS_OPTIONS定義敲茄、。若是枚舉不需要互相組合山析,則應(yīng)使用NS_ENUM來(lái)定義堰燎。

我們總習(xí)慣在switch語(yǔ)句最后加上default分支,然而這是不好的笋轨。應(yīng)為當(dāng)我們?cè)诿杜e中又添加一個(gè)新的狀態(tài)時(shí)秆剪,如果有default這個(gè)分支,那么它就會(huì)處理這個(gè)新?tīng)顟B(tài)爵政。從而導(dǎo)致編譯器不發(fā)警告信息仅讽,這就容易出現(xiàn)漏洞,發(fā)生錯(cuò)誤卻不知道哪里出錯(cuò)钾挟。如果去掉這個(gè)default分支洁灵,編譯器就會(huì)發(fā)出警告信息,提示新加入的狀態(tài)并未在switch分支中處理掺出。

  • 應(yīng)該用枚舉來(lái)表示狀態(tài)徽千,選項(xiàng),狀態(tài)碼汤锨。起個(gè)易懂的名字
  • 如果選項(xiàng)可以互相組合双抽,則使用NS_OPTIONS
  • 定義的時(shí)候自己給其賦初值,可以不使用編譯器給的默認(rèn)的值
  • 最好不用default分支闲礼,起到提醒作用
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末荠诬,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子位仁,更是在濱河造成了極大的恐慌柑贞,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,718評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件聂抢,死亡現(xiàn)場(chǎng)離奇詭異钧嘶,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)琳疏,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,683評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門(mén)有决,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)闸拿,“玉大人,你說(shuō)我怎么就攤上這事书幕⌒禄纾” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 158,207評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵台汇,是天一觀的道長(zhǎng)苛骨。 經(jīng)常有香客問(wèn)我,道長(zhǎng)苟呐,這世上最難降的妖魔是什么痒芝? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,755評(píng)論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮牵素,結(jié)果婚禮上严衬,老公的妹妹穿的比我還像新娘。我一直安慰自己笆呆,他們只是感情好请琳,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,862評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著赠幕,像睡著了一般俄精。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上劣坊,一...
    開(kāi)封第一講書(shū)人閱讀 50,050評(píng)論 1 291
  • 那天,我揣著相機(jī)與錄音屈留,去河邊找鬼局冰。 笑死,一個(gè)胖子當(dāng)著我的面吹牛灌危,可吹牛的內(nèi)容都是我干的康二。 我是一名探鬼主播,決...
    沈念sama閱讀 39,136評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼勇蝙,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼沫勿!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起味混,我...
    開(kāi)封第一講書(shū)人閱讀 37,882評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤产雹,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后翁锡,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體蔓挖,經(jīng)...
    沈念sama閱讀 44,330評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,651評(píng)論 2 327
  • 正文 我和宋清朗相戀三年馆衔,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了瘟判。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片怨绣。...
    茶點(diǎn)故事閱讀 38,789評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖拷获,靈堂內(nèi)的尸體忽然破棺而出篮撑,到底是詐尸還是另有隱情,我是刑警寧澤匆瓜,帶...
    沈念sama閱讀 34,477評(píng)論 4 333
  • 正文 年R本政府宣布赢笨,位于F島的核電站,受9級(jí)特大地震影響陕壹,放射性物質(zhì)發(fā)生泄漏质欲。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,135評(píng)論 3 317
  • 文/蒙蒙 一糠馆、第九天 我趴在偏房一處隱蔽的房頂上張望嘶伟。 院中可真熱鬧,春花似錦又碌、人聲如沸九昧。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,864評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)铸鹰。三九已至,卻和暖如春皂岔,著一層夾襖步出監(jiān)牢的瞬間蹋笼,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,099評(píng)論 1 267
  • 我被黑心中介騙來(lái)泰國(guó)打工躁垛, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留剖毯,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,598評(píng)論 2 362
  • 正文 我出身青樓教馆,卻偏偏與公主長(zhǎng)得像逊谋,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子土铺,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,697評(píng)論 2 351

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