iOS開發(fā)編碼建議與編程經(jīng)驗(yàn)

如何編寫出優(yōu)秀的代碼?

在開發(fā)過程中珊燎,我們不僅要去看別人的代碼危彩,也要讓別人看我們的代碼茶鉴。那么炼杖,有一個(gè)良好的編碼習(xí)慣將會非常重要灭返。下面將會羅列使用Objective-C來開發(fā)iOS的編碼建議。

【1】任意函數(shù)長度不得超過50行坤邪。(其實(shí)很容易就超過50行熙含,這就要考慮代碼抽取了。)

【2】任意行代碼不能超過80字符艇纺。(其實(shí)也很容易超過80字符怎静,可以考慮多行顯示,比如有多個(gè)參數(shù)時(shí)黔衡,可以每個(gè)參數(shù)放一行蚓聘。)可以在Xcode中設(shè)置超過80個(gè)字符的提醒,選中“Page guide at column”.設(shè)置完之后就會在代碼80個(gè)字符處有一條豎線员帮。

【3】在每個(gè)方法的定義前留白一行或粮,也就是在方法和方法之間留空一行。

【4】功能相近的方法要放在一起捞高,并推薦使用#pragma mark - ***來導(dǎo)航代碼氯材,切分代碼塊渣锦。這樣可以方便函數(shù)的查找。并且可以使用快捷鍵control+6 來快速查找方法的位置氢哮。

【5】二元運(yùn)算符和參數(shù)之間要有一個(gè)空格袋毙,如賦值號=左右各留一個(gè)空格。

self.myString = @"235423rew523452345";

【6】一元運(yùn)算符和參數(shù)之間不放置空格冗尤,比如听盖!非運(yùn)算符,&按位與裂七,|按位或皆看。

BOOL isOpen = true;  
BOOL isClose = !isOpen;

【7】強(qiáng)制類型轉(zhuǎn)換和參數(shù)之間不放置空格。

NSString *str3 = (NSString*)self.myString;

【8】長的變量值應(yīng)該拆分為多行背零。尤其體現(xiàn)在使用數(shù)組或者字典腰吟。以下也分別是快速聲明數(shù)組@[]和字典@{}的方法。

NSArray *array = @[@"111",  
                     @"2222222222",  
                     @"3333333",  
                     @"wwwwwwwwwwww"  
                     ];
                     @"age":@"20",  
                       @"gender":@"female",  
                       @"isMarried":@"false"  
                       };

【9】盡量使用有意義的名字命名徙瓶,拒絕使用i,j等無意義字符命名毛雇。類的命名首字母大寫,其他變量的命名首字符小寫侦镇,并使用駝峰式分割單詞灵疮。

【10】盡量減少在代碼中直接使用數(shù)字常量,而使用宏定義等方式壳繁。如:MAX_NUMBER_PHONE替代8等等震捣。這樣我們搜索也比較方便。

【11】盡量減少代碼中的重復(fù)計(jì)算氮趋,比如代碼中多處要使用屏幕寬度伍派,然后計(jì)算:[[UIScreenmainScreen] bounds].size.width ,很多次,閑得很繁瑣剩胁,代碼也冗長诉植。不如直接宏定義:

#define SCREEN_WIDTH ([[UIScreen mainScreen] bounds].size.width)

【12】合理使用約定俗成的縮略詞:

alloc:分配;
alt:輪流昵观,交替晾腔;
app:應(yīng)用程序;
calc:計(jì)算啊犬;
dealloc:銷毀灼擂、析構(gòu);
func:函數(shù)觉至、方法剔应;
horiz:水平的;
info:信息;
init:初始化峻贮;
max:最大的席怪;
min:最小的;
msg:消息纤控;
nib:Interface Builder挂捻;
rect:矩形;
temp:暫時(shí)的船万;
vert:垂直的刻撒;
【13】宏定義全部字母大寫。

【14】函數(shù)長度不要超過50行耿导,小函數(shù)比大函數(shù)可讀性更強(qiáng)声怔。函數(shù)的參數(shù)不宜過多,零元函數(shù)最好碎节,一元函數(shù)也不錯(cuò)捧搞,高于三元的函數(shù)虛重構(gòu)。

【15】合理范圍內(nèi)使用鏈?zhǔn)骄幊?

NSString *myName = [[NSString alloc] init];

但是嵌套不宜超過3層狮荔,超過3層需進(jìn)行重構(gòu)。

【16】函數(shù)調(diào)用時(shí)所有參數(shù)在同一行介粘。如果參數(shù)過多殖氏,則可以每行一個(gè)參數(shù),每個(gè)參數(shù)以冒號對齊姻采。

【17】對傳入?yún)?shù)的保護(hù)或者說是否為空的判斷雅采,盡量不要使用if(!obj),而使用NSAssert斷言來處理。NSAssert是系統(tǒng)定義的宏慨亲。

NSAssert(myName != nil, @"myName參數(shù)為空");

如果條件判斷為真婚瓜,則程序繼續(xù)執(zhí)行。
如果判斷條件為假刑棵,則拋出異常巴刻,異常內(nèi)容為后面定義的字符串。
【18】方法參數(shù)名前一般使用"an","the","new"來進(jìn)行修飾蛉签。如:

-(void)setPersonInfo:(NSString*)theID theName:(NSString*)theName theAge:(NSInteger*)theAge

【19】if-else超過四層的時(shí)候胡陪,就要考慮重構(gòu)碍舍,多層的if-else結(jié)構(gòu)很難維護(hù)妈经。

【20】當(dāng)需要一定條件才執(zhí)行某項(xiàng)操作時(shí),最左邊的應(yīng)該是最重要的代碼,不要將最重要的代碼內(nèi)嵌到if中。如良好的風(fēng)格是:

- (void) someMethod {  
if(![someOther boolValue]) {  
   return;  
  }  
//最重要的代碼寫在這里露筒;  
}

反面教材:

- (void) someMethod {  
if([someOther boolValue]) {   
     //重要代碼趟径;  
  }  
}

【21】所有的邏輯塊都使用{}花括號包圍,就算只是一行代碼。

【22】明確指定構(gòu)造函數(shù)渺尘,并有適當(dāng)?shù)淖⑨尅?/p>

【23】不要在init方法中把變量或者說屬性初始化為0或者nil锌雀,因?yàn)闆]有必要侈贷。

【24】UIView的子類初始化的時(shí)候上遥,不要進(jìn)行任何的布局操作粉楚。布局操作應(yīng)該在layoutSubviews里面做;需要重新布局的時(shí)候調(diào)用setNeedsLayout亮垫,而不要直接調(diào)用layoutSubviews模软。

【25】保持公共API簡單,也就是保持.h文件簡單饮潦。放在.h中聲明的函數(shù)都是會被公開的燃异,如果根本就沒必要對其他類公開,再不要在.h中聲明继蜡。OC中的方法都是公有方法回俐,沒有私有方法一說。

【26】一個(gè)文件只實(shí)現(xiàn)一個(gè)類稀并。同一個(gè)文件中不要有多個(gè)類仅颇。

【27】Protocol單獨(dú)用一個(gè)文件來創(chuàng)建,盡量不要與相關(guān)類混在一個(gè)文件中稻轨。

【28】在類定義中使用到自己定義類的時(shí)候灵莲,盡量不要在頭文件中引入自己定義類的頭文件,使用@class替代殴俱。而在實(shí)現(xiàn)文件中引入頭文件。

【29】布局時(shí)盡量使用相對布局枚抵,比如使用子View在父View中的相對位置线欲。

【30】代碼折疊,這個(gè)可能是關(guān)于開發(fā)效率的汽摹,我也寫在編碼規(guī)范中李丰,因?yàn)檫@個(gè)很有用。Xcode7默認(rèn)沒有開啟代碼折疊逼泣,如果你的方法體行數(shù)很長趴泌,看起來會很不方便,此時(shí)你就可以把方法“收起來”拉庶,一個(gè)類中的結(jié)構(gòu)就會很清晰嗜憔。開啟方法如下:Xcode菜單-->Preferences-->Text Editing-->勾選Code folding ribbon.如圖:



【31】推薦方法的第一個(gè)花括號直接跟在方法體后,而不是另起一行氏仗,這樣可以減少代碼行吉捶。

【32】推薦方法體中的第一行留空,最后一行不留空,這樣一個(gè)方法就會比較清晰呐舔。如圖:



但是如果該花括號里面又是一個(gè)if币励,for之類的帶花括號的語句塊,那么上述的第一行可以不留空珊拼。

同樣食呻,如果花括號內(nèi)第一行是注釋的話,第一行也可以不留空澎现。注釋也起到了分隔代碼的作用仅胞,看起來比較清晰。

再者昔头,如果花括號內(nèi)只有一行代碼饼问,第一行可以不留空。

【33】block中第一行也要留空揭斧,同方法體中的第一行留空莱革,使代碼清晰。

【34】代表類方法和實(shí)例方法的"+"加號,"-"減號后需要一個(gè)空格讹开。這是一個(gè)非常小的細(xì)節(jié)盅视,系統(tǒng)默認(rèn)的方法都是這樣的,我們自己聲明或者實(shí)現(xiàn)一個(gè)方法的時(shí)候也需要這樣:



【35】這一條有點(diǎn)像編程經(jīng)驗(yàn)了旦万,就是為解決某個(gè)問題估算時(shí)間闹击。比如要開發(fā)某個(gè)功能、調(diào)試某個(gè)bug成艘、給自己一個(gè)時(shí)間限制赏半,如果在這期間不能解決問題,那么就去尋求幫助淆两。這既是給自己一個(gè)壓力断箫,也為了不浪費(fèi)時(shí)間。雖然秋冰,這一條其實(shí)很難做到仲义,我往往由于不甘心而無限拖延時(shí)間去解決問題。

【36】由于提到編程經(jīng)驗(yàn)剑勾,就不得不提到版本控制埃撵。務(wù)必去學(xué)會SVN或者Git,就算你是獨(dú)立開發(fā)虽另,也要學(xué)會控制自己的代碼暂刘,當(dāng)然,你要經(jīng)常備份你的代碼洲赵。

上面都是我的一家之言鸳惯,如果大家的開發(fā)團(tuán)隊(duì)或者公司有自己的編碼規(guī)范商蕴,當(dāng)然按照團(tuán)隊(duì)的來。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末芝发,一起剝皮案震驚了整個(gè)濱河市绪商,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌辅鲸,老刑警劉巖格郁,帶你破解...
    沈念sama閱讀 221,635評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異独悴,居然都是意外死亡例书,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,543評論 3 399
  • 文/潘曉璐 我一進(jìn)店門刻炒,熙熙樓的掌柜王于貴愁眉苦臉地迎上來决采,“玉大人,你說我怎么就攤上這事坟奥∈鞑t!?“怎么了?”我有些...
    開封第一講書人閱讀 168,083評論 0 360
  • 文/不壞的土叔 我叫張陵爱谁,是天一觀的道長晒喷。 經(jīng)常有香客問我,道長访敌,這世上最難降的妖魔是什么凉敲? 我笑而不...
    開封第一講書人閱讀 59,640評論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮寺旺,結(jié)果婚禮上爷抓,老公的妹妹穿的比我還像新娘。我一直安慰自己阻塑,他們只是感情好废赞,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,640評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著叮姑,像睡著了一般。 火紅的嫁衣襯著肌膚如雪据悔。 梳的紋絲不亂的頭發(fā)上传透,一...
    開封第一講書人閱讀 52,262評論 1 308
  • 那天,我揣著相機(jī)與錄音极颓,去河邊找鬼朱盐。 笑死,一個(gè)胖子當(dāng)著我的面吹牛菠隆,可吹牛的內(nèi)容都是我干的兵琳。 我是一名探鬼主播狂秘,決...
    沈念sama閱讀 40,833評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼躯肌!你這毒婦竟也來了者春?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,736評論 0 276
  • 序言:老撾萬榮一對情侶失蹤清女,失蹤者是張志新(化名)和其女友劉穎钱烟,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體嫡丙,經(jīng)...
    沈念sama閱讀 46,280評論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡拴袭,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,369評論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了曙博。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片拥刻。...
    茶點(diǎn)故事閱讀 40,503評論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖父泳,靈堂內(nèi)的尸體忽然破棺而出般哼,到底是詐尸還是另有隱情,我是刑警寧澤尘吗,帶...
    沈念sama閱讀 36,185評論 5 350
  • 正文 年R本政府宣布逝她,位于F島的核電站,受9級特大地震影響睬捶,放射性物質(zhì)發(fā)生泄漏黔宛。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,870評論 3 333
  • 文/蒙蒙 一擒贸、第九天 我趴在偏房一處隱蔽的房頂上張望臀晃。 院中可真熱鬧,春花似錦介劫、人聲如沸徽惋。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,340評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽险绘。三九已至,卻和暖如春誉碴,著一層夾襖步出監(jiān)牢的瞬間宦棺,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,460評論 1 272
  • 我被黑心中介騙來泰國打工黔帕, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留代咸,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,909評論 3 376
  • 正文 我出身青樓成黄,卻偏偏與公主長得像呐芥,于是被迫代替她去往敵國和親逻杖。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,512評論 2 359

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

  • 在開發(fā)過程中思瘟,我們不僅要去看別人的代碼荸百,也要讓別人看我們的代碼。那么潮太,有一個(gè)良好的編碼習(xí)慣將會非常重要管搪。下面將會羅...
    船長_閱讀 2,531評論 4 82
  • 第5章 引用類型(返回首頁) 本章內(nèi)容 使用對象 創(chuàng)建并操作數(shù)組 理解基本的JavaScript類型 使用基本類型...
    大學(xué)一百閱讀 3,238評論 0 4
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,283評論 25 707
  • 今天一直在拖延面對寫作這件事,害怕寫不好铡买,感覺腦子一片空白更鲁,晚上也一直在拖著各種磨蹭不愿意開始,就想起今天早上聽羅...
    ManiaZebra閱讀 462評論 0 0
  • 人有一個(gè)本性就是索取奇钞,有人渴求知識澡为,渴求情操,渴求內(nèi)涵景埃。對于這些我們應(yīng)放大自己的自私媒至,多向別人學(xué)習(xí),探討來提升自己...
    依新閱讀 201評論 0 0