iOS命名規范

ThurmanMoyn 8年前發布 | 9K 次閱讀 iOS開發 移動開發 Objective-C

來自: 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>

 本文由用戶 ThurmanMoyn 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!