一鬼贱、文件目錄
項目基本目錄結(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)格指南
?
?
?