iOS命名規范
來自: http://www.henishuo.com/ios-name-principle/
命名基礎
在?面向對象軟件庫的設計過程中,開發人員經常忽視對類,?方法,函數,常量以及其他編程接?元素的命名。本節討論大多數 Cocoa 接?的一些命名約定。
一般性原則
最好是既清晰?又簡短,但不要為簡短?而喪失清晰性
代碼 | 點評 |
---|---|
insertObject:atIndex: | Good |
insert:at: | 不清晰;要插?什么?“at”表?示什么? |
removeObjectAtIndex: | Good |
removeObject: | 不錯,因為?法是?用來移除作為參數的對象 |
remove: | 不清晰;要移除什么? |
名稱通常不縮寫,即使名稱很?,也要拼寫完全
代碼 | 點評 |
---|---|
destinationSelection | Good |
destSel | 不清晰 |
setBackgroundColor: | Good |
setBkgdColor: | 不清晰 |
一致性
盡可能與 Cocoa 編程接?命名保持一致。如果你不太確定某個命名的?致性,請瀏覽頭文件或參考文檔中的范例,在使?多態方法的類中,命名的?致性?常重要。在不同類中實現相同功能的?法應該具有同的名稱。
代碼 | 點評 |
---|---|
– (NSInteger)tag | 在 NSView, NSCell, NSControl 中有定義 |
– (void)setStringValue:(NSString *) | 在許多 Cocoa classes 中都有定義 |
前綴
所有類名、枚舉、結構、 protocol 定義時,都加上全大寫的 HYB 作為前綴
后綴
所有 protocol 定義時,都加上后綴 Delegate 。如, HYBRefreshViewDelegate ,表示 RefreshView 的協議
導入頭文件
對于 Objective-C 的類文件,使用 #import 導入;對于 c,c++ 文件,使用 #include 導入
方法命名
方法名首字母小寫,其他單詞首字母大寫,每個空格分割的名稱以動詞開頭。如:
- (void)insertModel:(id)modelatIndex:(NSUInteger)atIndex;
屬性、變量命名
每個屬性命名都加上類型后綴,如,按鈕就加上 Button 后綴,模型就加上 Model 后綴。eg:
@property (nonatomic, strong) UIButton *submitButton;
對于內部私有變量,也需要加上后綴并以下劃線開頭,如: _titleLabel , _descLabel , _okButton
訪問方法
訪問?方法是對象屬性的讀取與設置?法。其命名有特定的格式,依賴于屬性的描述內容。
1、如果屬性是?用名詞表達的,則命名格式為:
- (type)noun; - (void)setNoun:(type)aNoun;
例如:
- (void)setTitle:(NSString *)aTitle;
2、如果屬性是?用形容詞表達的,則命名格式為:
- (BOOL)isAdjective; - (void)setAdjective:(BOOL)isAdjective; - (BOOL)isEditable; - (void)setEditable:(BOOL)isEditable;
3、如果屬性是?用動詞表達的,則命名格式為:
- (BOOL)verbObject; - (void)setVerbObject:(BOOL)flag; - - (BOOL)showsAlpha; - (void)setShowsAlpha:(BOOL)flag;
動詞要?用現在時時態
- 不要使?用動詞的過去分詞形式作形容詞使?用
- 可以使?用情態動詞( can , should , will 等)來提?高清晰性,但不要使?用 do 或 does
- (BOOL)openFile:(NSString *)fullPathwithApplication: (NSString *)appNameandDeactivate:(BOOL)flag; - (void)setAcceptsGlyphInfo:(BOOL)flag; // 不好 - (BOOL)acceptsGlyphInfo; - (void)setGlyphInfoAccepted:(BOOL)flag; // 不好 - (BOOL)glyphInfoAccepted; // 好 - (void)setCanHide:(BOOL)flag; - (BOOL)canHide; - // 好 - (void)setShouldCloseDocument:(BOOL)flag; // 不好 - (BOOL)shouldCloseDocument; // 好 - (void)setDoesAcceptGlyphInfo:(BOOL)flag; - (BOOL)doesAcceptGlyphInfo;
只有在方法需要間接返回多個值的情況下,才使? get 像上面這樣的方法,在其實現里應允許接受 NULL 作為其 in/out 參數,以表示調?者對?個或多個 返回值不感興趣。
委托方法
委托?方法是那些在特定事件發?生時可被對象調?用,并聲明在對象的委托類中的?方法。它們有獨特的命名約 定,這些命名約定同樣也適?用于對象的數據源?方法。
1、名稱以標示發送消息的對象的類名開頭,省略類名的前綴并?小寫第?個字?
- (BOOL)tableView:(NSTableView*)tableViewshouldSelectRow:(int)row; - (BOOL)application:(NSApplication *)sender openFile:(NSString *)filename;
2、冒號緊跟在類名之后(隨后的那個參數表?委派的對象)。該規則不適用于只有一個 sender 參數的?法:
- (BOOL)applicationOpenUntitledFile:(NSApplication *)sender;
3、上?的那條規則也不適?于響應通知的?法。在這種情況下,?方法的唯?參數表?通知對象
- (void)windowDidChangeScreen:(NSNotification *)notification;
4、?于通知委托對象操作即將發生或已經發?的方法名中要使? did 或 will
- (void)browserDidScroll:(NSBrowser *)sender;- (NSUndoManager *)windowWillReturnUndoManager:(NSWindow *)window;
5、用于詢問委托對象可否執行某操作的?法名中可使?did或will,但最好使?should
- (BOOL)windowShouldClose:(id)sender;
枚舉常量
聲明枚舉類型時,命名以 HYB 為前綴,而枚舉值以小寫 k 開頭,后面的單詞首字母大寫,其余小寫。如:
typedef NS_ENUM(NSUInteger, HYBContentMode) { kContentModeScaleFit = 1 << 1, kContentModeScaleFill = 1 << 2 };
const常量
以小寫 k 開頭,后面單詞首字母大寫,其余小寫。如:
const float kMaxHeigt = 100.0f;
如果是靜態常量,僅限本類內使用的,加上前綴 s_ ,如果是整個工程共用,以 sg_ 為前綴。如:
s_kMaxHeight; sg_kMaxHeight;
其他常量
1、使用 #define 聲明普通常量,以小寫 k 開頭,后面的單詞首字母大寫,其余小寫。如:
#define kScreenWidth ([UIScreen mainScreen].bounds.size.width)
2、通知常量名,以Notification為后綴,如:
#define kLoginSuccessNotification @”HYBLoginSucessNotification”
代碼注釋
類注釋
類頭需要有注釋,功能說明,作者等:如,
/** * 這里是功能說明 * * @author Huangyibiao * @modify 如果有修改需要這行,加上修改人和修改日期 */ @interface HYBUIMaker : NSObject
方法注釋
方法注釋需要加上作者,功能說明,參數說明,返回值說明:
/** * @author * 描述內容 * * @param string <#string description#> * @param font <#font description#> * * @return <#return value description#> */ + (CGSize)sizeWithString:(NSString*)stringandFont:(UIFont *)font;
塊注釋
對于塊注釋,有多種多種風格
風格一:
///////////////////////////////////// // @name UIButton控件生成相關API /////////////////////////////////////
風格二:
// // 塊功能說明 //
風格三:
/* * 塊功能說明 * */
類內分塊結構寫法
有生命周期的類,從上到下結構為:
#pragma mark – life cycle #pragma mark – Delegate #pragma mark – CustomDelegate… #pragma mark – Event #pragma mark - Network #pragma mark – Private #pragma mark – Getter/Setter
參考
本文檔參考 Coding Guidelines for Cocoa
關注我
Swift/ObjC技術群一: 324400294(已滿)
Swift/ObjC技術群二: 494669518
ObjC/Swift高級群: 461252383(注明年限,新手勿擾)
關注微信公眾號: iOSDevShares
關注新浪微博賬號:標哥Jacky
標哥的GITHUB地址: CoderJackyHuang
支持并捐助
如果您覺得文章對您很有幫忙,希望得到您的支持。您的捐肋將會給予我最大的鼓勵,感謝您的支持!
</div>