国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

Cocoa 編碼指南 為方法命名

移動開發 iOS
在面向對象軟件庫的設計過程中,開發人員經常忽視對類、方法、函數、常量以及其他編程接元素的命名。本節討論的是為方法命名,先來看內容。

Cocoa 編碼指南 為方法命名是本文要介紹的內容,方法可能是編程接口中最常見的元素了,因此對其命名要特別注意。本部分討論方法命名的相關方面:

通用規則

方法命名時,請記住下面這些通用的指導原則:

方法名稱應以小寫字符開頭,名稱中的單詞首字符要大寫。另外,請不要在方法名稱中使用前綴。您可以參考“書寫約定”一節,以了解更多信息。

有兩種特定的情況不適用該原則。其一,方法的名稱可以使用某個眾所周知的縮寫開頭,而該縮寫可以大寫(例如,TIFF 或者PDF)。其二,您可以使用前綴來分組并區分私有方法(請參考“私有方法”一節)。

如果方法代表一個對象執行的動作,則其名稱應該以一個動詞開頭:

  1. (void)invokeWithTarget:(id)target;   
  2.  (void)selectTabViewItem:(NSTabViewItem *)tabViewItem  

請不要使用 “do”或者 “does”作為名稱的一部分,因為這些輔助性的動詞 不能為名稱增加更多的含義。同時,請不要在動詞之前使用副詞或者形容詞。

如果方法返回接收者的某個屬性,則以屬性名稱作為方法名。如果方法沒有間接地返回一個或多個值,您也無須使用”get“這樣的單詞。

  1. (NSSize)cellSize;正確  
  2. (NSSize)calcCellSize;錯誤  
  3. (NSSize)getCellSize; 錯誤 

您可以參考 “存取方法”一節,以了解更多的信息。

所有參數前面都應使用關鍵字。

  1. (void)sendAction:(SEL)aSelector to:(id)anObject forAllCells:(BOOL)flag;正確  
  2. (void)sendAction:(SEL)aSelector :(id)anObject :(BOOL)flag;錯誤 

參數前面的單詞應能夠對參數進行描述。

  1. (id)viewWithTag:(int)aTag;正確  
  2. (id)taggedView:(int)aTag;錯誤 

如果您當前創建的方法比起它所繼承的方法更有針對性,則您應該在已有的方法名稱后面添加關鍵字,并將其作為新方法的名稱。

  1. (id)initWithFrame:(NSRect)frameRect; NSView  
  2. (id)initWithFrame:(NSRect)frameRect mode:(int)aMode cellClass:(Class)factoryId numberOfRows:(int)rowsHigh numberOfColumns:
  3. (int)colsWide;NSMatrix是NSView的子類。 

請不要使用”and“來連接兩個表示接受者屬性的關鍵字。

  1. (int)runModalForDirectory:(NSString *)path file:(NSString *) name types:(NSArray *)fileTypes;正確  
  2. (int)runModalForDirectory:(NSString *)path andFile:(NSString *)name andTypes:(NSArray *)fileTypes;錯誤 

雖然上面的例子使用”and“這個詞感覺還不錯,但是隨著創建的方法所帶有的關鍵字越來越多,這種方式會引起問題。

如果方法描述了兩個獨立的動作,請使用”and“把它們連接起來。

  1. (void)setNoun:(type)aNoun;  
  2. (type)noun; 

存取方法

存取方法用于設置或返回對象的屬性(也就是對象的實例變量)。由于屬性的表示方法不同,我們提倡的存取方法的格式也有差異:

如果某個屬性使用名詞來表示,則方法的格式如下:

  1. (void)setNoun:(type)aNoun;  
  2. (type)noun; 

例如:

  1. (void)setColor:(NSColor *)aColor;   
  2. (NSColor *)color;  

如果某個屬性使用形容詞表示, 則方法的格式為:

  1. (void)setAdjective:(BOOL)flag;  
  2. BOOL)isAdjective; 

例如:

  1. (void)setEditable:(BOOL)flag;   
  2. BOOL)isEditable;  

如果某個屬性使用動詞表示,則方法的格式為:

  1. (void)setVerbObject:(BOOL)flag;  
  2. (BOOL)verbObject; 

例如:

  1. (void)setShowsAlpha:(BOOL)flag;   
  2. (BOOL)showsAlpha;  

這種情況下,動詞應使用一般現在時的格式。

請不要使用分詞形式把動詞轉換為形容詞:

  1. (void)setAcceptsGlyphInfo:(BOOL)flag;正確  
  2. (BOOL)acceptsGlyphInfo;正確  
  3. (void)setGlyphInfoAccepted:(BOOL)flag;錯誤  
  4. (BOOL)glyphInfoAccepted;錯誤 

您可以使用情態動詞(在動詞前冠以“can”,"should","will"等),使得方法的名稱更加明確,但是請不要使用“do”或“does”這樣的情態動詞。

  1. (void)setCanHide:(BOOL)flag;正確  
  2. (BOOL)canHide;正確  
  3. (void)setShouldCloseDocument:(BOOL)flag;正確  
  4. (BOOL)shouldCloseDocument;正確  
  5. (void)setDoesAcceptGlyphInfo:(BOOL)flag;錯誤  
  6. (BOOL)doesAcceptGlyphInfo;錯誤 

只有當方法間接地返回對象或者數值,您才需要在方法名稱中使用get"。這種格式只適用于需要返回多個數據項的方法。

  1. (void)getLineDash:(float *)pattern count:(int *)count phase:(float *)phase;  
  2. NSBezierPath 

如果方法格式和上面一樣,則其實現應該能夠接受NULL 參數,這樣調用者才能夠表明他們對其中的一個或者多個返回值不感興趣。

委托方法

委托方法是指當某些事件發生時,對象在委托里調用的處理方法(如果委托實現了它們)。委托方法的格式獨特,但它也適用于在對象數據源里調用的方法:

方法名稱的開頭應標識出發送消息的對象所屬的類:

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

在此,類的名稱不需要使用前綴并且首字符要小寫。

除非方法只有一個參數,并且該參數表示消息的發送者,否則類名稱后面都要加上一個冒號(參數是委托對象的引用)。

  1. (BOOL)applicationOpenUntitledFile:(NSApplication *)sender;  

如果是因為發送了一則通告而導致某個方法被調用,則上述原則不適用。在這種情況下,方法僅有的一個參數是通告對象。

  1. (void)windowDidChangeScreen:(NSNotification *)notification;  

如果調用某個方法是為了通知委托某個事件已經發生或者即將發生, 則請在方法名稱中使用“did”或者“will”這樣的助動詞。

  1. (void)browserDidScroll:(NSBrowser *)sender;   
  2. (NSUndoManager *)windowWillReturnUndoManager:(NSWindow *)window;  

如果調用某個方法是為了要求委托代表其他對象執行某件事,當然,您也可以在方法名稱中使用“did”或者“will”,但我們傾向于使用“should”。

  1. (BOOL)windowShouldClose:(id)sender;  

集合方法

對于管理一個對象集合的對象(每個被管理的對象稱為集合的一個元素),習慣上,我們要求它具有如下格式的方法:

  1. (void)addElement:(elementType)anObj;  
  2. (void)removeElement:(elementType)anObj;  
  3. (NSArray *)elements; 

例如:

  1. (void)addLayoutManager:(NSLayoutManager *)obj;   
  2. (void)removeLayoutManager:(NSLayoutManager *)obj;   
  3. (NSArray *)layoutManagers;  

下述內容是該原則的條件和細化:

如果集合確實是無序的, 則應返回一個NSSet類型的對象,而不是返回NSArray對象。

如果把元素插入到集合的指定位置這一功能很重要,則應使用與下面類似的方法來替換或者補充前述的某些方法。

  1. (void)insertLayoutManager:(NSLayoutManager *)obj atIndex:(int)index;   
  2. (void)removeLayoutManagerAtIndex:(int)index;  

使用集合方法時, 您需要記住下面這兩條實現細節:

上述方法通常隱含了它們對于被插入對象的所有權,因此,用于添加或者插入對象的代碼必須增加對象的計數,而用于移除對象的代碼也必須要釋放對象。

如果被插入的對象需要有一個指針指向其幕后的主對象, 則通常情況下, 您應該使用 set...這樣方法,它可以設置對象的背后對象指針,但并不增加其引用計數。我們以 insertLayoutManager:atIndex:方法為例,NSLayoutManager使用如下方法來實現這一功能:

  1. (void)setTextStorage:(NSTextStorage *)textStorage;   
  2. (NSTextStorage *)textStorage;  

正常情況下, 您應該不會直接調用setTextStorage:方法,但可能需要對其進行重寫。

我們還有另外一個示列用于展示集合方法的上述約定,它來自于NSWindow類:

  1. (void)addChildWindow:(NSWindow *)childWin ordered:(NSWindowOrderingMode)place;   
  2. (void)removeChildWindow:(NSWindow *)childWin;   
  3. (NSArray *)childWindows;   
  4. (NSWindow *)parentWindow;   
  5. (void)setParentWindow:(NSWindow *)window;  

方法的參數

下面是數條和方法參數命名相關的通用規則:

和方法名稱一樣, 參數的名稱也是以小寫的字符開頭,并且后續單詞的首字符要大寫。例如:removeObject:(id)anObject)。

請不要在參數名稱中使用"pointer"或者"ptr"。您應該使用參數的類型來聲明參數是否是一個指針。

請不要使用一到兩個字符的名稱作為參數名。

請不要使用只剩幾個字符的縮寫。

習慣上(在Cocoa中),我們把下面的關鍵字和參數應該組合在一起使用:

  1. ...action:(SEL)aSelector   
  2. ...alignment:(int)mode   
  3. ...atIndex:(int)index   
  4. ...content:(NSRect)aRect   
  5. ...doubleValue:(double)aDouble   
  6. ...floatValue:(float)aFloat   
  7. ...font:(NSFont *)fontObj   
  8. ...frame:(NSRect)frameRect   
  9. ...intValue:(int)anInt   
  10. ...keyEquivalent:(NSString *)charCode   
  11. ...length:(int)numBytes   
  12. ...point:(NSPoint)aPoint   
  13. ...stringValue:(NSString *)aString   
  14. ...tag:(int)anInt   
  15. ...target:(id)anObject   
  16. ...title:(NSString *)aString  

私有方法

大多數情況下,私有方法遵循和公共方法一樣的命名規則。但是,有一種常見的約定是為私有方法添加一個前綴,這樣我們就很容易區分它們。但即便是利用這樣的約定,私有方法的名稱還是有可能導致奇怪的問題。當您為某個Cocoa框架類設計子類時,您無法知道您的某個私有方法是否在無意中覆蓋了具有相同名稱的私有的框架方法

大部分Cocoa框架中私有方法的名稱都帶有一個下劃線前綴(例如,_fooData ),這個前綴把方法標記為私有。根據這樣的實際情況,我們給出兩條建議:

請不要在您的私有方法中使用下劃線作為前綴,因為蘋果公司保留使用這種命名約定。

在為某個很大的Cocoa框架類(例如NSView)派生子類時,如果需要絕對保證子類私有方法名稱不會和超類發生沖突,則您可以為子類私有方法添加自己的前綴。前綴應該盡可能地具有***性,也許您的前綴可以基于公司或者項目名稱,并且使用"XX_"這樣的格式。例如,如果您的項目叫做Byte Flogger,則前綴可以是BF_addObject:這樣的格式。

盡管為私有方法名稱添加前綴似乎和早前我們對類方法的命名要求相矛盾,但這是因為此處的目的和早前不同:我們這么做是為了避免在無意中重寫了超類中的私有方法

小結:關于Cocoa 編碼指南 為方法命名的內容介紹完了,希望本文對你有所幫助!推薦幾篇相關內容:

Cocoa 編碼指南 代碼命名基礎: http://mobile.51cto.com/iphone-274085.htm
Cocoa 編碼指南 為函數命名: http://www.sunluscious.com.cn/php/viewart.php?artID=274108  
Cocoa 編碼指南 為方法命名: http://www.sunluscious.com.cn/php/viewart.php?artID=274104
Cocoa 編碼指南 為實例變量和數據類型命名:http://www.sunluscious.com.cn/php/viewart.php?artID=274094
Cocoa 編碼指南 框架開發者使用技巧和技術http://www.sunluscious.com.cn/php/viewart.php?artID=274094

責任編輯:zhaolei 來源: 互聯網
相關推薦

2011-07-07 10:39:07

Cocoa 函數

2011-07-07 10:07:19

Cocoa 框架

2011-07-07 10:18:58

Cocoa 實例變量 數據

2011-06-17 16:23:49

Cocoa蘋果

2011-07-07 10:50:09

Cocoa 框架

2011-07-07 13:30:32

Cocoa Core

2011-07-07 14:22:27

Cocoa 對象 生命周期

2011-06-17 15:57:46

CocoaXcode蘋果

2011-06-15 17:02:02

CocoaiOS

2011-07-07 14:46:10

Cocoa Xcode

2011-07-07 14:10:21

Cocoa 內省 hash

2011-06-17 15:38:15

Cocoa蘋果

2011-08-11 15:46:55

CocoaCocoa Touch框架

2011-08-10 19:33:09

Cocoa對象

2011-08-10 18:37:32

CocoaMac OS X

2023-11-22 08:00:56

Go命名規范

2011-07-08 10:49:59

Cocoa Touch 靜態庫

2011-05-11 15:27:58

Windows OOPCocoa MVCCocoa

2011-07-07 13:51:24

Cocoa 框架

2024-01-17 16:29:59

點贊
收藏

51CTO技術棧公眾號

国精产品999国精产品官网| 欧美办公室脚交xxxx| 国产精品色在线观看| 超碰影院在线观看| 国内精品久久久久久久影视麻豆| 久久久久久久久久国产| 日韩av网站在线观看| 久久久久久久久久久视频| 欧美日韩精品免费观看视频 | 久久久视频在线| 国产伦精品一区二区三区视频| 97久久精品在线| 国产精品色在线| 国语一区二区三区| 免费黄色一级网站| 日韩在线视频播放| 久久精品免费看| 影音先锋男人资源在线| www日韩av| 欧美亚洲综合在线| 久久国产主播| 成人福利在线| 日本精品久久久| 亚洲日本一区二区三区| 人人网欧美视频| 欧美理论在线观看| 欧美日韩亚洲在线| 深夜福利日韩在线看| 国产精品996| 日韩精品一区二区三区中文| 九色视频网站| 久久资源av| 亚洲精品视频免费| 国产三级欧美三级| 99国产精品一区二区| 高清电影在线免费观看| 亚洲中文字幕无码一区二区三区| 久久这里只有精品99| 亚洲影视在线观看| 性色一区二区| 国产乱人伦精品一区| 岛国大片在线观看| 妞干网这里只有精品| 国模吧一区二区| 欧美性猛交xxxx乱大交退制版| 免费一区视频| 久久久91麻豆精品国产一区| 三级在线电影| 亚洲美免无码中文字幕在线| 成人在线激情视频| 在线观看亚洲视频| 国产精品天干天干在线综合| 欧美精品久久久久久| 国产另类xxxxhd高清| 路边理发店露脸熟妇泻火| 国产精品99久久久久久久久| 日韩精品影音先锋| 国产亚洲欧美一区在线观看| 在线一区视频| 综合国产在线| 136福利精品导航| 伦理在线一区| 成人免费在线观看| 1024精品视频| 中文字幕制服丝袜在线| 大波视频国产精品久久| 亚洲第一av网站| 欧美色欧美亚洲高清在线视频| 天使萌一区二区三区免费观看| 午夜在线激情影院| 免费一级特黄特色毛片久久看| 亚洲www在线| 日韩精品视频免费| 精品国产免费人成在线观看| 丁香五六月婷婷久久激情| av资源网一区| 国产精品影音先锋| 久久精品久久99精品久久| 国产农村妇女毛片精品久久莱园子| 日韩欧美自拍| 国产欧美日韩在线观看视频| 91精品麻豆| 久久精品免视看国产成人| 亚洲精品一区在线| 精品国产91| 精品不卡视频| 噜噜噜91成人网| 国产麻豆精品在线观看| 不卡一区二区中文字幕| 99国产精品久| 欧美国产欧美综合| 亚洲视频一二三| 午夜亚洲福利老司机| 一本到不卡免费一区二区| 51精品国自产在线| 欧美大片在线观看| 美女少妇精品视频| 国产欧美精品日韩精品| 国产精品久久久久久久小唯西川 | 久久久久久久国产精品| 97在线精品国自产拍中文| 亚洲另类欧美自拍| 浅井舞香一区二区| 一区二区三区四区视频在线| av电影成人| 97国产精品视频人人做人人爱| 成人精品国产福利| 成人在线免费观看视频| 色爱av综合网| 免费在线播放第一区高清av| 国产91色综合久久免费分享| 亚洲美女视频在线| 精品性高朝久久久久久久| 欧美日韩国产成人在线观看| www.xxxx精品| 97视频资源在线观看| 在线一区亚洲| 国产宾馆自拍| 日韩子在线观看| 成人av观看| 999国产精品视频| 国产精品资源网站| 亚洲午夜成aⅴ人片| 91精品国产福利在线观看| 日韩中文字幕视频在线观看| 欧美在线免费视频| 亚洲欧美日产图| 久草在线新资源| 久久青草视频| 一区二区日本视频| 久久久综合九色合综国产精品| 一区二区三区影院| 日韩视频国产视频| 国产欧美日韩亚洲精品| 欧美aaa在线观看| 亚洲国产资源| 国产69精品久久久久9999人| 欧美精品尤物在线观看| 成人精品在线视频观看| 欧美日韩午夜剧场| 午夜精品久久久久久久久久久久久 | 欧美fxxxxxx另类| gogo大胆日本视频一区| 欧美人体做爰大胆视频| 国产成人极品视频| 欧美乱做爰xxxⅹ久久久| 3p视频在线观看| 欧美在线导航| 国产精品1区二区.| 亚洲另类欧美自拍| 国产综合色一区二区三区| 亚洲啪啪aⅴ一区二区三区9色| 欧美日韩直播| 国产欧美日韩另类一区| 日韩中文理论片| 亚洲高潮无码久久| 污视频在线免费观看网站| 在线日韩av| 欧美综合在线视频| **欧美日韩vr在线| 日本新janpanese乱熟| 少妇一区视频| 日韩精品视频网站| 日韩欧美一二三区| 一区二区在线不卡| 3d玉蒲团在线观看| 欧美gay男男猛男无套| 欧美日韩国产综合视频在线观看 | 综合色一区二区| 精品婷婷伊人一区三区三| 黄色小网站91| 成人mm视频在线观看| 国产精品久久久久毛片软件| 欧美在线观看日本一区| 婷婷五月在线视频| www国产精品av| 亚洲自拍在线观看| 91精品产国品一二三产区| 国产精品你懂的在线| 99国精产品一二二线| 日韩三区在线| 性感美女久久精品| ijzzijzzij亚洲大全| 久久.com| 涩涩涩视频在线观看| 日本免费一区二区三区视频观看| 好吊色欧美一区二区三区四区| 欧美一区二区三区四区在线观看地址| 最后生还者第二季在线观看| 日本亚州欧洲精品不卡| 国产日韩欧美麻豆| 国产不卡一区二区三区在线观看| 毛片无码国产| av在线一区二区| 欧美激情导航| 久久综合成人| 久久久精品一区二区三区| 久久久pmvav| 制服诱惑一区二区| 久久久之久亚州精品露出|