OC蘋果官方標(biāo)準(zhǔn)
一、 通用標(biāo)準(zhǔn)Apple文檔地址:
命名要精簡且語義清晰(可讀性高),不能為了精簡犧牲可讀性.
比如:方法 insertObject:atIndex: 相比 insert:at :來說,可讀性高;removeObject:和removeObjectAtIndex:相比remove:來說可讀性高。不能使用單詞的縮寫命名.
比如:destinationSelection相比destSel來講,可讀性更高。標(biāo)準(zhǔn)2的例外:一些常用的單詞縮寫,可以繼續(xù)使用.
比如:alloc func max rect等常用名詞。避免可能引起歧義的命名.
比如:sendPort 函數(shù)名,讓人搞不清是函數(shù)功能是發(fā)送一個(gè)port還是返回port。與cocoa代碼的接口命名保持一致,尤其是在自己編寫的具有多態(tài)性類的方法時(shí)。
比如:initWithFrame等方法,其他方法可以參考cocoa的頭文件。前綴的使用范圍.
前綴由一個(gè)以上的大寫字母組成,如UI,NS等。前綴可以用在類名,協(xié)議名,函數(shù)名,常數(shù)名,typedef的結(jié)構(gòu)體名;不要用在類的方法名中,也不要用于結(jié)構(gòu)體(未typedef)。
二、 類名和協(xié)議名規(guī)范apple文檔
協(xié)議名不能與類名混淆,即協(xié)議名聽起來不能像類名。通用的方式是使用動(dòng)名詞來命名協(xié)議。比如,NSLocking比NSLock更合適作為協(xié)議名,因?yàn)榍罢吒幌耦惷?/p>
三、 頭文件命名規(guī)范apple文檔
聲明的類(或類別、協(xié)議)不是一個(gè)類(或類別,協(xié)議)的集合時(shí),應(yīng)該將類(或類別,協(xié)議)聲明在一個(gè)獨(dú)立的頭文件中。
例如:NSLocal.h中只聲明NSLocal類。聲明的類(或類別、協(xié)議)屬于一個(gè)類(或類別,協(xié)議)的集合時(shí),將所有類(或類別,協(xié)議)放在一起,某個(gè)頭文件中。
例如: NSString.h文件中,聲明了NSString和NSMutableString類。包含框架頭文件時(shí),每個(gè)框架應(yīng)該對(duì)應(yīng)一個(gè)頭文件
例如:Foundation.framework位于Foundation.h頭文件中。相關(guān)的函數(shù),常量,結(jié)構(gòu)體,和其他數(shù)據(jù)類型,應(yīng)該定義在同一個(gè)頭文件中。
例如:NSGraphics.h頭文件中聲明的是繪圖相關(guān)的函數(shù),常量等。
四、 方法命名規(guī)范Apple文檔鏈接命名方法的時(shí)候,避免使用前綴,應(yīng)該以小寫字母打頭。
避免 NSLock樣式的用法,應(yīng)使用 initWithFrame的駝峰式。方法實(shí)現(xiàn)的內(nèi)容是執(zhí)行某個(gè)操作時(shí),方法名的開頭應(yīng)為動(dòng)詞
例如:- (void)invokeWithTarget:(id)target;方法。
不要使用do或does作為名字的一部分,不要將形容詞或副詞放在動(dòng)詞前。屬性的讀寫方法中的讀方法,不必使用get等前綴
例如:方法 - (NSSize)cellSize;返回cell尺寸
不必寫成: - (NSSize)getCellSize;對(duì)于多個(gè)參數(shù)的方法,每個(gè)參數(shù)應(yīng)使用關(guān)鍵詞修飾
例如:- (void)sendAction:(SEL)aSelector
toObject:(id)anObject
forAllCells:(BOOL)flag;
而不能寫成- (void)sendAction:(SEL)aSelector
:(id)anObject
:(BOOL)flag;方法名中,位于形參之前的詞應(yīng)該修飾參數(shù)
例如:- (id)viewWithTag:(NSInteger)aTag;
而不應(yīng)該寫成 - (id)taggedView:(int)aTag;繼承于已存在的方法,并且較已存在的方法參數(shù)更多,使用范圍更細(xì)致的方法,應(yīng)將新增的參數(shù)加在已存在函數(shù)的后面
例如:- (id)initWithFrame:(CGRect)frameRect;和
- (id)initWithFrame:(NSRect)frameRect
mode:(int)aMode
cellClass:(Class)factoryId
numberOfRows:(int)rowsHigh
numberOfColumns:(int)colsWide;
- 不要使用and連接相關(guān)聯(lián)的屬性
例如:- (int)runModalForDirectory:(NSString *)path
file:(NSString *) name
types:(NSArray *)fileTypes;
而不要寫成:
- (int)runModalForDirectory:(NSString *)path
andFile:(NSString *)name
andTypes:(NSArray *)fileTypes;
- 應(yīng)該使用and連接兩個(gè)無關(guān)聯(lián)的動(dòng)作
- (BOOL)openFile:(NSString *)fullPath
withApplication:(NSString *)appName
andDeactivate:(BOOL)flag;
屬性的讀寫方法:
如果屬性是一個(gè)名詞,他的讀寫方法應(yīng)該寫成如下形式:
- (NSString *)title;
- (void)setTitle:(NSString *)aTitle;
如果屬性是一個(gè)形容詞,讀寫方法應(yīng)寫成如下形式:
- (BOOL)isEditable;
- (void)setEditable:(BOOL)flag;
如果屬性是一個(gè)動(dòng)詞,其讀寫方法應(yīng)該如下形式:
- (BOOL)showsAlpha;
- (void)setShowsAlpha:(BOOL)flag;當(dāng)方法中包含的動(dòng)詞的過去分詞為形容詞時(shí),不要使用過去分詞
例如: - (void)setAcceptsGlyphInfo:(BOOL)flag;
不要寫成 - (void)setGlyphInfoAccepted:(BOOL)flag;可以使用情態(tài)動(dòng)詞 can,should,will等,而不要使用do或does
在方法同時(shí)返回(或同時(shí)修改)多個(gè)值時(shí),方法名使用get為開頭。
如:- (void)getLineDash:(float *)pattern
count:(int *)count
phase:(float *)phase;委托方法(委托協(xié)議)命名
方法開頭應(yīng)該是能標(biāo)識(shí)調(diào)用此方法的類的對(duì)象。
例如: - (BOOL)tableView:(NSTableView *)tableView
shouldSelectRow:(int)row;和
- (BOOL)application:(NSApplication *)sender
openFile:(NSString *)filename;使用will或did來表示委托方法要運(yùn)行,或已經(jīng)運(yùn)行
例如:- (void)browserDidScroll:(NSBrowser *)sender;
- (void)viewWillAppear:(BOOL)animated;表示集合的類的方法命名規(guī)范
集合類應(yīng)該具備增刪元素,返回全部元素的方法
例如:- (void)addLayoutManager:(NSLayoutManager *)obj;
- (void)removeLayoutManager:(NSLayoutManager *)obj;
- (NSArray *)layoutManagers;
如果集合類中元素為無序的,返回類型應(yīng)該是NSSet而不應(yīng)是NSArray類型。
需要在集合中間添加刪除元素時(shí),方法應(yīng)該使用:
- (void)insertLayoutManager:(NSLayoutManager *)obj
atIndex:(int)index;
- (void)removeLayoutManagerAtIndex:(int)index;形式
-
方法的參數(shù)命名規(guī)范
首字母小寫,駝峰形式;不要使用pointer或者ptr在參數(shù)名中;避免使用只包含一個(gè)或兩個(gè)字母的參數(shù)名;不要使用只省略了幾個(gè)字母的單詞縮寫。
?蝪? 函數(shù),屬性,常量等的命名規(guī)范Apple官方地址:
1.區(qū)別于類方法的命名方式,函數(shù)命名有兩點(diǎn)明顯區(qū)別:
有固定的前綴,如NSHighlight;緊挨前綴之后的首字母大寫。
盡量以函數(shù)的作用或影響來給函數(shù)命名,并以動(dòng)詞開頭,如
float NSHeight(NSRect aRect)。
如果函數(shù)的返回值是引用類型,在函數(shù)名中使用get,如
const char *NSGetSizeAndAlignment(const char *typePtr, unsigned int
*sizep, unsigned int *alignp)
2.屬性是bool類型的,除非強(qiáng)調(diào)成員變量的讀屬性,否則使用is打頭。
3.常量的命名規(guī)范
值為整型的互相關(guān)聯(lián)的數(shù)個(gè)常量,應(yīng)該寫在命名的枚舉類型中。
如:
typedef enum _NSMatrixMode {
NSRadioModeMatrix = 0,
NSHighlightModeMatrix = 1,
NSListModeMatrix = 2,
NSTrackModeMatrix = 3
} NSMatrixMode;可以使用未命名的枚舉,針對(duì)位掩碼的賦值,如
enum {
NSBorderlessWindowMask = 0,
NSTitledWindowMask = 1 << 0,
NSClosableWindowMask = 1 << 1,
NSMiniaturizableWindowMask = 1 << 2,
NSResizableWindowMask = 1 << 3
};
六.其他命名規(guī)范
不要使用#define來聲明常量。對(duì)應(yīng)整型的常數(shù),應(yīng)使用命名的枚舉來定義;對(duì)于浮點(diǎn)數(shù)常量,應(yīng)該用const關(guān)鍵詞修飾。
預(yù)編譯 #ifdef 定義的名,應(yīng)使用全大寫的單詞,如 #ifdef DEBUG
由編譯器生成的宏,其前后應(yīng)有雙下劃線標(biāo)識(shí),如MACH
通知的命名規(guī)范。
形式如下:
相關(guān)的類 + [did或will] + 名字中唯一標(biāo)識(shí) + Notification
如,NSApplicationDidBecomeActiveNotification