讀代碼隨筆


命名

  • 在定義各種viewcontroller是沒有統(tǒng)一使用前綴,可以和第三方庫形成命名重復(fù),同事在錯誤時不利于定位。如YHMainViewController,YHLessionPerformenceView等等
  • 如在CtrlMain中,變量mNoWorkInfomWrkChartLblShow,mLesLblDataContMain根本不知道是什么。其實(shí)是UIView,可以寫noWorkInfoView,至少知道是那一類,如果是UIButton,可以申明為UIButton *xxxButton,尾部帶上類名。
  • 各種縮寫,不知道什么意思。(縮寫了而且沒有注釋),如主頁CtrlMain,至少應(yīng)該是MainViewController
  • 私有方法同樣可以加前綴方便追蹤,如p_doSomeThing,yh_doOtherThing.
  • 在網(wǎng)絡(luò)訪問時方法名如:getTextFieldValuegetTokenWithMobile,一般可以改為textFieldValue,tokenWithMobile,等等。而且get很少使用,即使是表示動作累方法時。
    *mLesLblDataContMain,這個必須單獨(dú)拿出啦,簡直就是奇葩,各種縮寫les,lbl,cont,沒有類,神仙也猜不到什么東東啊。居然是一個label對象,那個地方的lable呢自己估計都不知道。
    可以參考《代碼命名規(guī)范》相關(guān)文章

Define

  • 大量的宏定義,宏定義也存在命名不規(guī)范。關(guān)鍵是現(xiàn)在不推薦宏定義來定義變量,而是通過關(guān)鍵字staticconst來定義變量。

NS_ENUM

  • 對于有限的選項可以使用enum來增強(qiáng)可讀性,避免使用0,1等。如:
typedef NS_ENUM(NSInteger, UIBarButtonItemStyle) {
    UIBarButtonItemStylePlain,
    UIBarButtonItemStyleBordered,
    UIBarButtonItemStyleDone,
};

Switch

  • 使用switch語句時,case下盡量不要寫整個方法的實(shí)現(xiàn),應(yīng)把單獨(dú)寫一個方法。這樣一眼就可以看著每個分支的功能。如:
case UIBarButtonItemStylePlain:
    [self doSomeThing];
    break;
case UIBarButtonItemStyleBordered:
    [self doOtherThing];
    break;

備注:case UIBarButtonItemStylePlain:參考NS_ENUM。

代碼注釋

  • 論壇上很多人對于代碼注釋持不同態(tài)度,可能認(rèn)為代碼注釋太多說明命名處理問題。但畢竟代碼注釋確實(shí)可以為以后維護(hù)提供了很大的方便,尤其是在命名方面不是特別好,設(shè)計很好的情況下建議加注釋。也為以后生成文檔提供了方便,如appledoc工具。

屬性關(guān)鍵字copy,readonly

  • 如果不希望外邊修改開放的屬性,可以使用擴(kuò)展。如果必須對外開放的屬性盡量使用readonly關(guān)鍵字修飾屬性,設(shè)置為只讀,格外寫類似addremove方法進(jìn)行修改。
  • 如果是NSString類型盡可能使用copy關(guān)鍵字修飾,防止對象被修改導(dǎo)致聯(lián)動。

UIViewController

controller扮演的角色是數(shù)據(jù)管理,數(shù)據(jù)調(diào)配。不相關(guān)的事情最好不要放到里邊,最好封裝提供接口。

  • 大量的view初始化代碼都放到conroller中,導(dǎo)致controller代碼臃腫。導(dǎo)致主要的邏輯被view模塊給淹沒,很不利用擴(kuò)展維護(hù)。 可以對view進(jìn)行封裝,使用懶加載,在getter中統(tǒng)一初始化。這樣只有主要邏輯(強(qiáng)業(yè)務(wù))放到controller中。
  • CtrlMain中成績展示寫死在controller中,每次修改都要修改contrller中代碼不利于擴(kuò)展。比如增加減少科目等。
  • 網(wǎng)絡(luò)訪問也可以封裝一個類似NetWork類,提供網(wǎng)絡(luò)獲取數(shù)據(jù),只給controller提供一個借口訪問獲得數(shù)據(jù),具體怎獲得,使用的什么網(wǎng)絡(luò)庫,controller不應(yīng)該知道。
  • controller臃腫,之前有博客分享controller中只應(yīng)該有這幾個分層
    #pragam LifeCycle#pragam Event Method#pragam Delegate#pragam Pravite Method#pragam Setter and Getter。原則就是能不放到controller中的就不放,全部模塊化有利于維護(hù)和擴(kuò)展。

代碼小習(xí)慣

  • 蘋果建議多使用類似CGRectGetWidth(CGRect),少使用[[UIScreen mainScreen] bounds].size.heigh簡單復(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ú)拿出來

CGFloat height = CGRectGetHeight([UIScreen mainScreen].bounds);
CGFloat width  = CGRectGetWidth([UIScreen mainScreen].bounds);

使用heightwidth替換 [[UIScreen mainScreen] bounds].size.height,方法會簡短很多,更易讀。

可以參考文章:iOS應(yīng)用架構(gòu)談 view層的組織和調(diào)用方案

關(guān)于代碼設(shè)計

  • 主頁包含了三個CtrlMain,分別是老師端,家長端,學(xué)生端,分別實(shí)現(xiàn)了loadView 而且主界面非常相似,簡單的辦法可以使用一個Util抽出重復(fù)代碼,好一點(diǎn)的辦法把相關(guān)view抽出使用組合方式實(shí)現(xiàn)CtrlMain,從而實(shí)現(xiàn)代碼復(fù)用,即便view樣式變化也不用再去修改CtrlMain代碼。

自己也在學(xué)習(xí)中,可以參考《大話設(shè)計模式》、《iOS設(shè)計模式》書籍。

關(guān)于代碼強(qiáng)迫癥

  • 大量的警告,很多都是方法過期,以及常量轉(zhuǎn)換問題,盡管對運(yùn)行一般沒有影響,但如我我們自己特意寫的警告可能會被淹沒,不好尋找。
  • 使用Analyze分析大量的內(nèi)存泄露,以及l(fā)ogic error,以及dead store *

只要稍微花一點(diǎn)時間檢查就可以避免警告,很多人說寫代碼最低的要求就是,零警告并且可以通過Analyze測試。當(dāng)然我們還可以使用instruments進(jìn)行更多的優(yōu)化

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,363評論 6 532
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,497評論 3 416
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,305評論 0 374
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,962評論 1 311
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 71,727評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 55,193評論 1 324
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,257評論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 42,411評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 48,945評論 1 335
  • 茶點(diǎn)故事閱讀 40,777評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 42,978評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,519評論 5 359
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 44,216評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,642評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,878評論 1 286
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,657評論 3 391
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 47,960評論 2 373

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

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,646評論 25 708
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 134,782評論 18 139
  • 27、ViewController的didReceiveMemoryWarning是在什么時候調(diào)用的?默認(rèn)的操作是...
    煙雨平生花飛舞閱讀 602評論 0 1
  • 有趣的問題 你編寫過的最酷的代碼是什么?其中你最自豪的是什么? 在你使用過的開發(fā)工具中,最喜歡哪個? 你有什么業(yè)余...
    春木橙云閱讀 208評論 0 0
  • 姓名:王方河 公司:寧波大發(fā)化纖有限公司 寧波盛和塾《六項精進(jìn)》235期學(xué)員。 【日精進(jìn)打卡第39天】 【知~學(xué)習(xí)...
    北轅南轍閱讀 154評論 0 0