命名
- 在定義各種
view
和controller
是沒(méi)有統(tǒng)一使用前綴壹店,可以和第三方庫(kù)形成命名重復(fù),同事在錯(cuò)誤時(shí)不利于定位。如YHMainViewController
,YHLessionPerformenceView
等等 - 如在
CtrlMain
中胖眷,變量mNoWorkInfo
,mWrkChartLblShow
,mLesLblDataContMain
根本不知道是什么霹崎。其實(shí)是UIView
珊搀,可以寫(xiě)noWorkInfoView
,至少知道是那一類(lèi)尾菇,如果是UIButton境析,可以申明為UIButton *xxxButton,尾部帶上類(lèi)名派诬。 - 各種縮寫(xiě)劳淆,不知道什么意思。(縮寫(xiě)了而且沒(méi)有注釋?zhuān)┠福缰黜?yè)CtrlMain沛鸵,至少應(yīng)該是MainViewController
- 私有方法同樣可以加前綴方便追蹤,如
p_doSomeThing
,yh_doOtherThing
. - 在網(wǎng)絡(luò)訪(fǎng)問(wèn)時(shí)方法名如:
getTextFieldValue
放可,getTokenWithMobile
,一般可以改為textFieldValue
,tokenWithMobile
谒臼,等等。而且get很少使用耀里,即使是表示動(dòng)作累方法時(shí)蜈缤。
*mLesLblDataContMain
,這個(gè)必須單獨(dú)拿出啦,簡(jiǎn)直就是奇葩冯挎,各種縮寫(xiě)les底哥,lbl,cont房官,沒(méi)有類(lèi)趾徽,神仙也猜不到什么東東啊。居然是一個(gè)label對(duì)象翰守,那個(gè)地方的lable呢自己估計(jì)都不知道孵奶。
可以參考《代碼命名規(guī)范》相關(guān)文章
Define
- 大量的宏定義,宏定義也存在命名不規(guī)范蜡峰。關(guān)鍵是現(xiàn)在不推薦宏定義來(lái)定義變量了袁,而是通過(guò)關(guān)鍵字
static
和const
來(lái)定義變量。
NS_ENUM
- 對(duì)于有限的選項(xiàng)可以使用enum來(lái)增強(qiáng)可讀性湿颅,避免使用0载绿,1等。如:
typedef NS_ENUM(NSInteger, UIBarButtonItemStyle) {
UIBarButtonItemStylePlain,
UIBarButtonItemStyleBordered,
UIBarButtonItemStyleDone,
};
Switch
- 使用switch語(yǔ)句時(shí)油航,case下盡量不要寫(xiě)整個(gè)方法的實(shí)現(xiàn)崭庸,應(yīng)把單獨(dú)寫(xiě)一個(gè)方法。這樣一眼就可以看著每個(gè)分支的功能。如:
case UIBarButtonItemStylePlain:
[self doSomeThing];
break;
case UIBarButtonItemStyleBordered:
[self doOtherThing];
break;
備注:case UIBarButtonItemStylePlain:參考NS_ENUM怕享。
代碼注釋
- 論壇上很多人對(duì)于代碼注釋持不同態(tài)度执赡,可能認(rèn)為代碼注釋太多說(shuō)明命名處理問(wèn)題。但畢竟代碼注釋確實(shí)可以為以后維護(hù)提供了很大的方便熬粗,尤其是在命名方面不是特別好搀玖,設(shè)計(jì)很好的情況下建議加注釋。也為以后生成文檔提供了方便驻呐,如
appledoc
工具灌诅。
屬性關(guān)鍵字copy,readonly
- 如果不希望外邊修改開(kāi)放的屬性含末,可以使用擴(kuò)展猜拾。如果必須對(duì)外開(kāi)放的屬性盡量使用
readonly
關(guān)鍵字修飾屬性,設(shè)置為只讀佣盒,格外寫(xiě)類(lèi)似add
挎袜,remove
方法進(jìn)行修改。 - 如果是NSString類(lèi)型盡可能使用copy關(guān)鍵字修飾肥惭,防止對(duì)象被修改導(dǎo)致聯(lián)動(dòng)盯仪。
UIViewController
controller扮演的角色是數(shù)據(jù)管理,數(shù)據(jù)調(diào)配蜜葱。不相關(guān)的事情最好不要放到里邊全景,最好封裝提供接口。
- 大量的view初始化代碼都放到conroller中牵囤,導(dǎo)致controller代碼臃腫爸黄。導(dǎo)致主要的邏輯被view模塊給淹沒(méi),很不利用擴(kuò)展維護(hù)揭鳞。 可以對(duì)view進(jìn)行封裝炕贵,使用懶加載,在getter中統(tǒng)一初始化野崇。這樣只有主要邏輯(強(qiáng)業(yè)務(wù))放到controller中称开。
- CtrlMain中成績(jī)展示寫(xiě)死在controller中,每次修改都要修改contrller中代碼不利于擴(kuò)展乓梨。比如增加減少科目等钥弯。
- 網(wǎng)絡(luò)訪(fǎng)問(wèn)也可以封裝一個(gè)類(lèi)似
NetWork
類(lèi),提供網(wǎng)絡(luò)獲取數(shù)據(jù)督禽,只給controller提供一個(gè)借口訪(fǎng)問(wèn)獲得數(shù)據(jù),具體怎獲得总处,使用的什么網(wǎng)絡(luò)庫(kù)狈惫,controller不應(yīng)該知道。 - controller臃腫,之前有博客分享controller中只應(yīng)該有這幾個(gè)分層
#pragam LifeCycle
胧谈、#pragam Event Method
忆肾、#pragam Delegate
、#pragam Pravite Method
菱肖、#pragam Setter and Getter
客冈。原則就是能不放到controller中的就不放,全部模塊化有利于維護(hù)和擴(kuò)展稳强。
代碼小習(xí)慣
- 蘋(píng)果建議多使用類(lèi)似
CGRectGetWidth(CGRect)
场仲,少使用[[UIScreen mainScreen] bounds].size.heigh
簡(jiǎn)單復(fù)用,更可讀退疫,如:
WorkSubjectsView *wrkSubject = [[WorkSubjectsView alloc] initWithFrame:CGRectMake(Subject_DIV * [[UIScreen mainScreen] bounds].size.width + (i % 3) *(Subject_DIV + Subject_width) * [[UIScreen mainScreen] bounds].size.width,[self getViewBottom:seperateLine] +(Subject_Div_Vertical - Subject_Hight) *[[UIScreen mainScreen] bounds].size.height + (i / 3) * Subject_Div_Vertical *[[UIScreen mainScreen] bounds].size.height,Subject_width * [[UIScreen mainScreen] bounds].size.width, Subject_Hight * [[UIScreen mainScreen] bounds].size.height)];
可以把 [[UIScreen mainScreen] bounds].size.height
單獨(dú)拿出來(lái)
CGFloat height = CGRectGetHeight([UIScreen mainScreen].bounds);
CGFloat width = CGRectGetWidth([UIScreen mainScreen].bounds);
使用height
和width
替換 [[UIScreen mainScreen] bounds].size.height
渠缕,方法會(huì)簡(jiǎn)短很多,更易讀褒繁。
可以參考文章:iOS應(yīng)用架構(gòu)談 view層的組織和調(diào)用方案
關(guān)于代碼設(shè)計(jì)
- 主頁(yè)包含了三個(gè)CtrlMain亦鳞,分別是老師端,家長(zhǎng)端棒坏,學(xué)生端燕差,分別實(shí)現(xiàn)了loadView 而且主界面非常相似,簡(jiǎn)單的辦法可以使用一個(gè)Util抽出重復(fù)代碼坝冕,好一點(diǎn)的辦法把相關(guān)view抽出使用組合方式實(shí)現(xiàn)CtrlMain徒探,從而實(shí)現(xiàn)代碼復(fù)用,即便view樣式變化也不用再去修改CtrlMain代碼徽诲。
自己也在學(xué)習(xí)中刹帕,可以參考《大話(huà)設(shè)計(jì)模式》、《iOS設(shè)計(jì)模式》書(shū)籍谎替。
關(guān)于代碼強(qiáng)迫癥
- 大量的警告偷溺,很多都是方法過(guò)期,以及常量轉(zhuǎn)換問(wèn)題钱贯,盡管對(duì)運(yùn)行一般沒(méi)有影響挫掏,但如我我們自己特意寫(xiě)的警告可能會(huì)被淹沒(méi),不好尋找秩命。
- 使用Analyze分析大量的內(nèi)存泄露尉共,以及l(fā)ogic error,以及dead store *
只要稍微花一點(diǎn)時(shí)間檢查就可以避免警告弃锐,很多人說(shuō)寫(xiě)代碼最低的要求就是袄友,零警告并且可以通過(guò)Analyze測(cè)試。當(dāng)然我們還可以使用instruments進(jìn)行更多的優(yōu)化