讀代碼隨筆


命名

  • 在定義各種viewcontroller是沒(méi)有統(tǒng)一使用前綴壹店,可以和第三方庫(kù)形成命名重復(fù),同事在錯(cuò)誤時(shí)不利于定位。如YHMainViewController,YHLessionPerformenceView等等
  • 如在CtrlMain中胖眷,變量mNoWorkInfomWrkChartLblShow,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)鍵字staticconst來(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);

使用heightwidth替換 [[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)化

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末霹菊,一起剝皮案震驚了整個(gè)濱河市剧蚣,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖鸠按,帶你破解...
    沈念sama閱讀 222,104評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件礼搁,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡目尖,警方通過(guò)查閱死者的電腦和手機(jī)馒吴,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,816評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)瑟曲,“玉大人饮戳,你說(shuō)我怎么就攤上這事〔舛祝” “怎么了莹捡?”我有些...
    開(kāi)封第一講書(shū)人閱讀 168,697評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)扣甲。 經(jīng)常有香客問(wèn)我篮赢,道長(zhǎng),這世上最難降的妖魔是什么琉挖? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,836評(píng)論 1 298
  • 正文 為了忘掉前任启泣,我火速辦了婚禮,結(jié)果婚禮上示辈,老公的妹妹穿的比我還像新娘寥茫。我一直安慰自己,他們只是感情好矾麻,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,851評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布纱耻。 她就那樣靜靜地躺著,像睡著了一般险耀。 火紅的嫁衣襯著肌膚如雪弄喘。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 52,441評(píng)論 1 310
  • 那天甩牺,我揣著相機(jī)與錄音蘑志,去河邊找鬼。 笑死贬派,一個(gè)胖子當(dāng)著我的面吹牛急但,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播搞乏,決...
    沈念sama閱讀 40,992評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼波桩,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了请敦?” 一聲冷哼從身側(cè)響起镐躲,我...
    開(kāi)封第一講書(shū)人閱讀 39,899評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤柏卤,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后匀油,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,457評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡勾笆,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,529評(píng)論 3 341
  • 正文 我和宋清朗相戀三年敌蚜,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片窝爪。...
    茶點(diǎn)故事閱讀 40,664評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡弛车,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出蒲每,到底是詐尸還是另有隱情纷跛,我是刑警寧澤,帶...
    沈念sama閱讀 36,346評(píng)論 5 350
  • 正文 年R本政府宣布邀杏,位于F島的核電站贫奠,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏望蜡。R本人自食惡果不足惜唤崭,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,025評(píng)論 3 334
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望脖律。 院中可真熱鬧谢肾,春花似錦、人聲如沸小泉。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,511評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)微姊。三九已至酸茴,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間柒桑,已是汗流浹背弊决。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,611評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留魁淳,地道東北人飘诗。 一個(gè)月前我還...
    沈念sama閱讀 49,081評(píng)論 3 377
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像界逛,于是被迫代替她去往敵國(guó)和親昆稿。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,675評(píng)論 2 359

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

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