iOS編碼規(guī)范

一鬼贱、文件目錄

項目基本目錄結(jié)構(gòu)如下屋摔,針對項目不同,可略作差異處理:

1.Views

存放界面層UIViewController和自定義的UIView鄙早,如項目有iPhone和iPad區(qū)分適配要求,又可細(xì)分為iPhone目錄和iPad目錄椅亚。
?
文件夾名按項目業(yè)務(wù)名進行劃分限番,例如:
- MainView
- UserView
- DigitalView

2.Tools

存放輕量級第三方組件、自定義組件什往、自定義類擴展。不包含cocoapod可導(dǎo)入的工具包慌闭,引用第三方庫的時候要謹(jǐn)慎别威,避免使用大容量的第三方庫,而導(dǎo)致客戶端非常大驴剔。
?
組件如:
- 日期時間處理工具 DateTool
- 彈出加載HUD處理 InfoTool
- 下拉刷新代碼圖片 UpdownRefresh
- 時間選擇器 UWDatePicker

擴展如:
- 彈出框Block返回  UIAlert+Blocks
- WebView用于加載Block模式  UIWebView+Blocks

3.Network

存放網(wǎng)絡(luò)請求框架和json模型省古。對應(yīng)項目請求數(shù)據(jù),可對模型層進行修改丧失。

基于目前項目應(yīng)用MVC框架結(jié)構(gòu)豺妓,具體文件內(nèi)容如下:
?
網(wǎng)絡(luò)請求:
- 請求方法處理 NetManager(AFNetWork相關(guān)代碼)
- 請求數(shù)據(jù)處理 NetManagerMessage(數(shù)據(jù)處理相關(guān)代碼和KVO消息廣播)

模型文件:
- 用戶信息模型  UserDetailObject:userID userName userPicture 

4.Supporting Files

存放配置文件和storyboard文件,包括:
?
Info.plist
ProjectName.pch
main.m
Main.storyboard
LaunchScreen.storyboard
ApiKey.h

5.Assets.xcassets

存放項目下圖片信息布讹,需按項目模塊分類大體與View文件夾中對應(yīng)琳拭。Nav菜單和Toolbar菜單中,貫穿整體使用的圖片描验,需單獨放置白嘁。

二、命名規(guī)則

1膘流、注意事項

  • 項目編碼格式統(tǒng)一采用UTF-8編碼
  • 代碼中除注釋外禁止出現(xiàn)中文(在xml等資源文件中)
  • 代碼中禁止出現(xiàn)警告提示痕跡 例如:#Warning

2絮缅、可使用的縮寫

除以下列舉的縮寫格式鲁沥,每個項目開始前應(yīng)進行分析,針對特殊命名進行文檔編寫

縮寫 全稱
bg background
vc viewcontroller
btn button
nav navgation

3耕魄、命名基本原則

  • 在面向?qū)ο缶幊讨谢。瑢τ陬悾瑢ο笪椒ㄔ噬龋兞康确矫娴拿麘?yīng)該本著描述性以及唯一標(biāo)識性這兩大特征來命名,才能保證資源之間不沖突奄抽,并且每一個都便于記憶蔼两。

  • 命名原則是:使名稱足夠長以便有一定的意義,并且足夠短以避免冗長逞度。

4额划、一般性原則:

  • 可讀性高(簡潔且清晰)和防止命名沖突(通過加前綴后綴來保證)
  • Objective-C 的命名通常都比較長, 名稱遵循駝峰式命名法.
  • 方法名要指明具體用途,讓開發(fā)者能一目了然档泽,清晰表達要插入什么俊戳?刪除什么?具體位置是指馆匿?
方法名合理 不合理 原因
insertObject:atIndex: insert:at: 插入什么抑胎?at是指?
removeObjectAtIndex: remove: 刪除什么渐北?
  • 盡可能保持與cocoa命名規(guī)則一致
代碼 原因
– (NSInteger)tag 在 NSView, NSCell, NSControl 中有定義
– (void)setStringValue:(NSString *) 在許多 Cocoa classes 中都有定義

5阿逃、文件的命名:

  • 分類的文件名應(yīng)該包含被擴展的類名,如NSString+HooUtils.h
  • 文件名不要使用縮寫

6赃蛛、類的命名:

類名(以及類別恃锉、協(xié)議名)應(yīng)首字母大寫,并以駝峰格式分割單詞呕臂。

a.類的前綴
  • 所有類名破托、枚舉、結(jié)構(gòu)歧蒋、protocol定義時最好加一個統(tǒng)一的標(biāo)示符土砂,可以是項目縮寫,或者個人項目的名稱縮寫谜洽,例如都加上全大寫的Hoo(我的姓氏)作為前綴
  • 根據(jù)功能模塊可以在給功能模塊的類添加功能模塊的名稱前綴萝映,如用戶中心的profileViewController.可以命名為HooUCProfileViewController.
b.類的后綴
  • 所有protocol定義時,都加上后綴Delegate 阐虚。如锌俱,HooRefreshViewDelegate,表示RefreshView的協(xié)議敌呈;
  • 所有的控制器都加上Controller,所有的通知名都加上Notification贸宏。

7造寝、類別命名

  • 類名+標(biāo)識+擴展(UIImageView +HP+Web)

    如果我們想要創(chuàng)建一個基于UIImageView 的類別用于網(wǎng)絡(luò)請求圖片,我們應(yīng)該把類別放到名字是UIImageView+HPWeb.h的文件里吭练。UIImageView為要擴展的類名诫龙,HP為專屬標(biāo)識,Web為擴展的功能鲫咽。

8签赃、方法命名

方法名應(yīng)遵守小駝峰原則,首字母小寫分尸,其他單詞首字母大寫,每個空格分割的名稱以動詞開頭锦聊。執(zhí)行性的方法應(yīng)該以動詞開頭,小寫字母開頭箩绍,返回性的方法應(yīng)該以返回的內(nèi)容開頭孔庭,但之前不要加get。如:

- (void)insertModel:(id)model atIndex:(NSUInteger)atIndex;

- (instancetype)arrayWithArray:(NSArray *)array;
a.代理方法

以發(fā)送代理的對象類名作為代理方法名的開始(去掉類名的前綴材蛛,并且小寫開頭)

- (BOOL)tableView:(NSTableView *)tableView shouldSelectRow:(int)row;
- (BOOL)application:(NSApplication *)sender openFile:(NSString *)filename;

9圆到、枚舉的命名

正宗的iOS開發(fā)者當(dāng)然要以O(shè)bjective-C的方式命名枚舉,如:

  typedef NS_ENUM(NSInteger, UIViewAnimationTransition) {
    UIViewAnimationTransitionNone,
    UIViewAnimationTransitionFlipFromLeft,
    UIViewAnimationTransitionFlipFromRight,
    UIViewAnimationTransitionCurlUp,
    UIViewAnimationTransitionCurlDown,
};

10卑吭、屬性芽淡、變量命名

變量名使用小駝峰法, 使變量名盡量可以推測其用途屬性具有描述性。別一心想著少打幾個字母豆赏,讓你的代碼可以迅速被理解更加重要挣菲。每個屬性命名都加上類型后綴,如掷邦,按鈕就加上Button
后綴白胀,模型就加上Model后綴。

@property (nonatomic, strong) UIButton *submitButton;
a.類成員變量名

成員變量用小駝峰法命名并前綴下劃線耙饰,如:

UIButton *_submitButton;
b.局部變量名

遵守小駝峰命名規(guī)則纹笼,如:

NSInteger numCompletedConnections =3;

const常量
以小寫k
開頭纹份,后面單詞首字母大寫苟跪,其余小寫。如:

const float kMaxHeigt = 100.0f;

如果是特殊含義的常量也建議加上后綴蔓涧,如通知加上Notification為后綴件已,如:

extern Nsstring * Const kLoginSuccessNotification

11、資源文件命名 (圖片元暴,本地化文件)

這個圖片資源命名方式篷扩,以功能為組織形式,是一個很好的習(xí)慣茉盏,有利于查看資源文件鉴未。

采用單詞全拼枢冤,或者大家公認(rèn)無岐義的縮寫(比如:nav,bg铜秆,btn等)

“模塊+功能”命名法淹真。

模塊分為公共模塊、私有模塊连茧。公共模塊主要包括統(tǒng)一的背景核蘸,導(dǎo)航條,標(biāo)簽啸驯,公共的按鈕背景客扎,公共的默認(rèn)圖等等;私有模塊主要根據(jù)app的業(yè)務(wù)功能模塊劃分罚斗,比如用戶中心徙鱼,消息中心等。
例如用戶中心用戶頭像圖片的命名可以為:uc_imageview_user_icon

三惰聂、注釋原則

方法注釋

對于方法的注釋疆偿,盡可能保留在聲明文件中。

當(dāng)它需要的時候搓幌,注釋應(yīng)該用來解釋特定的代碼做了什么杆故。所有的注釋必須被持續(xù)維護或者干脆就刪掉,不要做多余注釋溉愁,應(yīng)維持簡潔处铛。

塊注釋應(yīng)該被避免,代碼本身應(yīng)該盡可能就像文檔一樣表示意圖拐揭,只需要很少的打斷注釋撤蟆。 例外: 這不能適用于用來產(chǎn)生文檔的注釋

頭文檔

一個類的文檔應(yīng)該只在 .h 文件里用 Doxygen/AppleDoc 的語法書寫。 方法和屬性都應(yīng)該提供文檔堂污。

/**
*  Designated initializer.
*
*  @param  store  The store for CRUD operations.
*  @param  searchService The search service used to query the store.
*
*  @return A ZOCCRUDOperationsStore object.
*/
- (instancetype)initWithOperationsStore:(id<ZOCGenericStoreProtocol>)store
                      searchService:(id<ZOCGenericSearchServiceProtocol>)searchService;

類結(jié)構(gòu)布局

使用#pragma mark –來分類方法

#pragma mark – Life Cycle

#pragma mark - Events

#pragma mark – Private Methods

#pragma mark - UITextFieldDelegate

#pragma mark - UITableViewDataSource

#pragma mark - UITableViewDelegate

#pragma mark - Custom Delegates

#pragma mark – Getters and Setters

四家肯、編碼原則

  • 服務(wù)端可以實現(xiàn)的,就不要放在客戶端來實現(xiàn)
  • 如果多個ViewController中包含共同的UI處理盟猖,那么可以提煉一個CommonViewController讨衣,把通用部分叫由它來處理,其他ViewController只要繼承它即可
  • 數(shù)據(jù)一定要校驗式镐,例如反镇,字符型轉(zhuǎn)數(shù)字型,如果轉(zhuǎn)換失敗一定要有缺省值娘汞;服務(wù)端響應(yīng)數(shù)據(jù)是否有效判斷
  • 圖片需針對分辨率處理歹茶,圖片過大(超過200MB)需要壓縮
  • 不要重用父類的handler,對應(yīng)一個類的handler也不應(yīng)該讓其子類用到
  • 每個ViewController都有自己獨立的消息處理,其中包括正確的消息處理惊豺,錯誤處理燎孟,異常捕捉

2)采用“模塊+功能”命名法,模塊分為公共模塊尸昧、私有模塊缤弦。公共模塊主要包括統(tǒng)一的背景,導(dǎo)航條彻磁,標(biāo)簽碍沐,公共的按鈕背景,公共的默認(rèn)圖等等衷蜓;私有模塊主要根據(jù)app的業(yè)務(wù)功能模塊劃分累提,比如用戶中心,消息中心等磁浇。
例如用戶中心用戶頭像圖片的命名可以為:uc_imageview_user_icon

感謝jackiehoo(簡書作者)
部分參考來自于:http://www.reibang.com/p/c598d32560e8
http://www.reibang.com/p/1aa8b9bb4576
以及
Google 開源項目風(fēng)格指南

?
?
?

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末斋陪,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子置吓,更是在濱河造成了極大的恐慌无虚,老刑警劉巖,帶你破解...
    沈念sama閱讀 207,248評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件衍锚,死亡現(xiàn)場離奇詭異友题,居然都是意外死亡,警方通過查閱死者的電腦和手機戴质,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,681評論 2 381
  • 文/潘曉璐 我一進店門度宦,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人告匠,你說我怎么就攤上這事戈抄。” “怎么了后专?”我有些...
    開封第一講書人閱讀 153,443評論 0 344
  • 文/不壞的土叔 我叫張陵划鸽,是天一觀的道長。 經(jīng)常有香客問我戚哎,道長裸诽,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,475評論 1 279
  • 正文 為了忘掉前任建瘫,我火速辦了婚禮崭捍,結(jié)果婚禮上尸折,老公的妹妹穿的比我還像新娘啰脚。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 64,458評論 5 374
  • 文/花漫 我一把揭開白布橄浓。 她就那樣靜靜地躺著粒梦,像睡著了一般。 火紅的嫁衣襯著肌膚如雪荸实。 梳的紋絲不亂的頭發(fā)上匀们,一...
    開封第一講書人閱讀 49,185評論 1 284
  • 那天,我揣著相機與錄音准给,去河邊找鬼泄朴。 笑死,一個胖子當(dāng)著我的面吹牛露氮,可吹牛的內(nèi)容都是我干的祖灰。 我是一名探鬼主播,決...
    沈念sama閱讀 38,451評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼畔规,長吁一口氣:“原來是場噩夢啊……” “哼局扶!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起叁扫,我...
    開封第一講書人閱讀 37,112評論 0 261
  • 序言:老撾萬榮一對情侶失蹤三妈,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后莫绣,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體畴蒲,經(jīng)...
    沈念sama閱讀 43,609評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,083評論 2 325
  • 正文 我和宋清朗相戀三年对室,在試婚紗的時候發(fā)現(xiàn)自己被綠了饿凛。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,163評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡软驰,死狀恐怖涧窒,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情锭亏,我是刑警寧澤纠吴,帶...
    沈念sama閱讀 33,803評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站慧瘤,受9級特大地震影響戴已,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜锅减,卻給世界環(huán)境...
    茶點故事閱讀 39,357評論 3 307
  • 文/蒙蒙 一糖儡、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧怔匣,春花似錦握联、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,357評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽纯露。三九已至,卻和暖如春代芜,著一層夾襖步出監(jiān)牢的瞬間埠褪,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,590評論 1 261
  • 我被黑心中介騙來泰國打工挤庇, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留钞速,地道東北人。 一個月前我還...
    沈念sama閱讀 45,636評論 2 355
  • 正文 我出身青樓嫡秕,卻偏偏與公主長得像玉工,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子淘菩,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,925評論 2 344

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

  • 注釋規(guī)范 文件頭注釋 文件頭注釋采用如下格式遵班,該注釋由xcode自動生成。如果你對其他人的原始代碼作出重大的修改潮改,...
    yangzming閱讀 724評論 0 1
  • 命名 Bundle id命名: 規(guī)則:采用反域名命名規(guī)則狭郑,全部使用小寫字母。一級包名為com汇在,二級包名根據(jù)應(yīng)用進行...
    Tippi閱讀 1,620評論 0 2
  • Object-C 開發(fā)代碼規(guī)范概要Object-C是一門面向?qū)ο蟮膭討B(tài)編程語言翰萨,主要用于編寫IOS和MAC應(yīng)用程序...
    克魯?shù)吕?/span>閱讀 530評論 0 1
  • 面試被問到公司編碼規(guī)范問題,感覺有很多東西糕殉,但是不知道該怎么說出來亩鬼,今天突然找到 李明杰 老師的一份編碼規(guī)范。重新...
    Dombo_Y閱讀 961評論 1 2
  • 1. 給每個配置文件加上描述 最好使用descriptive id和名稱來代替在XML配置文件中的注釋阿蝶。此外雳锋,加上...
    野夢M閱讀 530評論 0 1