為您解碼網(wǎng)站建設(shè)的點(diǎn)點(diǎn)滴滴
發(fā)表日期:2018-07 文章編輯:小燈 瀏覽次數(shù):1850
《iOS App開(kāi)發(fā)的那些事兒》系列文章從更宏觀的角度出發(fā),不僅僅局限于具體某個(gè)功能、界面的實(shí)現(xiàn),而是結(jié)合網(wǎng)易云信iOS端研發(fā)負(fù)責(zé)人多年的經(jīng)驗(yàn),從如何優(yōu)化現(xiàn)有代碼的角度出發(fā),深度分析如何創(chuàng)造出iOS
App開(kāi)發(fā)中比較合適的規(guī)范和框架。
推薦閱讀
iOS App開(kāi)發(fā)的那些事兒2:如何搭建合適的框架
將代碼規(guī)范合理分級(jí)
大家都理解軟件開(kāi)發(fā)需要合適的規(guī)范:代碼規(guī)范,程序規(guī)范,流程規(guī)范等等,以此來(lái)減少意外的出現(xiàn):最少驚訝原則。但在實(shí)際執(zhí)行中卻會(huì)碰到各種情況,其中最大的問(wèn)題是:怎么鑒別哪些規(guī)范是需要強(qiáng)制執(zhí)行,哪些規(guī)范是推薦執(zhí)行。
規(guī)范的強(qiáng)制執(zhí)行帶來(lái)的是代碼的可讀性提升和二義性減少,而壞處也是顯而易見(jiàn)的:對(duì)于大部分有想法的程序員而言這種規(guī)定太死板,容易引起抵觸心理,產(chǎn)生不安定因素。這種情況常見(jiàn)于各種標(biāo)準(zhǔn)的外包公司。
而如果大部分的規(guī)范設(shè)定為推薦執(zhí)行,在沒(méi)有良好的引導(dǎo)下,規(guī)范容易被忽視。網(wǎng)上有很多關(guān)于ObjC的代碼規(guī)范,比如蘋(píng)果自家的規(guī)范和《Google
Objective-C Style Guide》等。這些規(guī)范一般只有兩種分級(jí):推薦和不推薦。而我更推薦把代碼規(guī)范分成五個(gè)等級(jí):強(qiáng)制要求,強(qiáng)烈推薦(但不強(qiáng)制),良好,可接受和不可接受。
以下僅舉部分例子加以說(shuō)明。
符合蘋(píng)果規(guī)范的命名方式
[if !supportLists]l? [endif]類(lèi)名開(kāi)頭大寫(xiě),方法和變量名以駝峰法命名。強(qiáng)烈要求,這沒(méi)有什么好說(shuō)的,蘋(píng)果系統(tǒng)類(lèi)庫(kù)和絕大多數(shù)的第三方開(kāi)源庫(kù)都是如此。但在部分蘋(píng)果的sample中也看到過(guò)用m做前綴表示類(lèi)成員變量的寫(xiě)法,這些都是屬于遺產(chǎn)代碼的問(wèn)題,仍舊是可接受范圍,但是自己代碼內(nèi)部使用類(lèi)似匈牙利的命名法就是不可接受。
[if !supportLists]l? [endif]類(lèi)名使用至少三個(gè)字符做前綴,內(nèi)部方法使用兩個(gè)下劃線做前綴。強(qiáng)烈推薦。上面的做法可以最大程度避免和系統(tǒng)類(lèi)庫(kù)發(fā)生重名的情況:因?yàn)樘O(píng)果宣稱(chēng)保留所有兩位字符前綴的使用權(quán),同時(shí)其內(nèi)部方法命名以一個(gè)下劃線做前綴。
[if !supportLists]l? [endif]無(wú)論使用K&R Style還是Allman Style都是可接受的范圍,但是強(qiáng)烈推薦在一個(gè)文件內(nèi)保持一種形式。
[if !supportLists]l? [endif]在保證代碼可讀性的基礎(chǔ)上保持代碼的簡(jiǎn)短和統(tǒng)一性:小類(lèi),小方法,統(tǒng)一的函數(shù)返回。小類(lèi),小方法可以保證他人閱讀時(shí)更方便地關(guān)注類(lèi)邏輯,而不是具體細(xì)節(jié),而統(tǒng)一的函數(shù)返回可以減少意外錯(cuò)誤和降低錯(cuò)誤排查的難度。而保證代碼的簡(jiǎn)短和不羅嗦也是很重要一點(diǎn),經(jīng)常會(huì)看到如下代碼:?if (count > 1) { return YES; } {return NO; },真心無(wú)法直視。
良好的代碼/工程結(jié)構(gòu)
[if !supportLists]l? [endif]為整個(gè)工程創(chuàng)建worksapce。
[if !supportLists]l? [endif]按照權(quán)責(zé)分門(mén)別類(lèi)存放資源文件:每種類(lèi)型的資源存放于獨(dú)立的目錄下:圖片,聲音,配置文件等等。而圖片又可以按照類(lèi)型分別存放在不同的子目錄下:全局類(lèi)型,背景圖,logo,登錄等等。
合理的代碼結(jié)構(gòu)。推薦如下的工程目錄結(jié)構(gòu)。
Core:工程內(nèi)一些通用的機(jī)制實(shí)現(xiàn)類(lèi):統(tǒng)一的任務(wù)管理,模塊管理,服務(wù)管理。
General:公用類(lèi)和方法,包括工程內(nèi)ViewController,UITableViewCell基類(lèi)(Base),公用Category(Category),公用UI組件(CustomUI),公用輔助方法(Helper)和宏定義(Marco)。
Model:公用數(shù)據(jù)模型
Sections:不同程序單元。如登錄,設(shè)置等等。其下又可以按照功能分成不同的子目錄:當(dāng)前單元使用的自定義UI組件,管理類(lèi),數(shù)據(jù)模型和ViewController等等。
Vendors:第三方庫(kù)。
《iOS App開(kāi)發(fā)的那些事兒》第二篇文章將會(huì)向大家介紹什么是合適的框架,如何搭建合適的框架,歡迎大家積極發(fā)表自己的看法,與我們共同討論。