亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

Objective-C命名編寫規范

2019-11-14 18:59:46
字體:
來源:轉載
供稿:網友

There are only two hard things in Computer Science: cache invalidation and naming things.
在計算機科學中只有兩件難事:緩存失效和命名。

— Phil Karlton

 

計算機語言是人和計算機之間通訊的媒介。好的代碼應該是就像人對計算機說話那樣,自然而優雅。命名看上去是一件很簡單的事,而往往越是簡單的事越難做好,否則大師們也不會把命名看成是計算機界的難題了。如何把Objective-C這門計算機語言以優雅的方式“說”出,還是比較考驗工程師對它的理解深度的。在蘋果的SDK中有大量的API,我們可以從這些API中體會到一些命名的藝術。

減少縮寫

命名縮寫只用于通用專業術語,如URL,不可自創命名縮寫,如Ctr、Msg。命名寧可長一些,也不要難于理解。

是否在看別人代碼時各種縮寫而不知其所以然?簡短的名字確實比較好,但不可濫用縮寫導致失去可讀性。

過程化

動作發生之前用Will,發生之后用Did,詢問是否發生用Should。

每個處理都是有一定過程的,這個處理往往會產生一些通知和回調,好的命名必須要明確當前過程中的步驟。命名這些通知和回調時最好提供發生前后兩個版本,如果發生前要回調確認,請用Should命名該回調,并返回一個BOOL值。

名字空間

各種全局作用范圍的函數,常量,類,枚舉,結構等命名必須加命名前綴。

Objective-C中沒有C++那樣的名字空間概念,也沒有java包名的概念,隨著工程代碼的增加,難免會出現名字沖突,因此全局作用范圍的名字必須唯一。比較經典的做法就是加命名前綴。大多數人認為命名前綴只是在類的前面加幾個大寫字母,其實不僅僅如此。

  • 類型(類、枚舉、結構)命名前要加相關模塊前綴。

    UIViewNSStringCGRect
  • 常量命名要加相關類型名前綴。

    UIapplicationDidFinishLaunchingNotificationCGRectZero
  • 函數命名要加相關類型名前綴。

    CGRectMakeCGPointMake
  • 枚舉類型命名要加相關類名前綴,并且枚舉值命名要加枚舉類型前綴。

    typedef NS_ENUM(NSInteger, UIViewAnimationTransition) {    UIViewAnimationTransitionNone,    UIViewAnimationTransitionFlipFromLeft,    UIViewAnimationTransitionFlipFromRight,    UIViewAnimationTransitionCurlUp,    UIViewAnimationTransitionCurlDown,};

做到以上幾點幾乎可以做到名字不會沖突。

參數提示

方法命名時,每個參數前要加參數的名稱提示。

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil- (void)performSegueWithIdentifier:(NSString *)identifier sender:(id)sender

對象命名

給一個帶修飾的對象命名時要采用修飾+類型的方式,而不是先指定其類型。

很多人喜歡把對象的類型放在對象的命名前面,從而來標識一個對象是什么類型,這很不符合Objective-C語言的特點,容易引起歧義,比如一個UILabel對象:

titleLabel      //表示標題的label,是UIlabel對象labelTitle      //label的標題?似乎是一個NSString?confirmButton   //確認按鈕buttonConfirm   //不自然的命名,看上去像是按鈕點擊動作。

方法命名符合語法

大部分方法可以分成下面兩類,而這兩類往往被亂用。它們是:

  • 要什么
  • 做什么

“要什么”表示取得某個對象,要以名詞作為方法的開頭;“做什么”表示執行某種操作,要以動詞作為方法開頭??纯聪旅孢@個命名方式:

- (XXItem *)itemNamed:(NSString *)name           //Good. 意思清晰- (XXItem *)findItemWithName:(NSString *)name    //更像是一種操作,而不是返回一個對象。

findItemWithName這個命名表示一種操作,而無需返回對象,比如它可以用于設置類的內部成員,比如:

- (void)findItemWithName:(NSString *)name{    ...    self.foundItem = xxx;    ...}

get

“要什么”往往被胡亂命名為get開頭的方法。首先get是一個動詞,所以它還是“做什么”或者說“做的是要什么”。那么get方法不要用于返回對象,但它可用于參數中返回。

- (XXItem *)getItemAtIndex:(NSUInteger)index                  //Bad!! 不規范的命名- (XXItem *)itemAtIndex:(NSUInteger)index                     //Good, 命名清晰- (void)getItem:(XXItem **)outItem atIndex:(NSUInteger)index  //比較符合規范,但第二種更好。

可知性

回調時被調用者要知道其調用者

可以在回調方法中第一個參數中加上調用者:

- (BOOL)application:(UIApplication *)application willFinishLaunchingWithOptions:(NSDictionary *)launchOptions- (void)buttonTapped:(UIButton*)sender

常量還是宏

全局常量不可使用宏定義

我們經??吹揭恍┯煤甓x的通知,關鍵字等。其實這么做是非常危險的,因為宏很可能被重定義,而且引用不同的文件可能會導致宏的不同,所以盡量使用const來定義常量。

一些思考

命名的好壞在開發中往往也不怎么重視,畢竟差的命名也不會影響程序邏輯。

但是不好的命名在大項目中帶來的隱形維護成本是相當高的,這些在項目開始時 可能還很難察覺,而后來會陷入前仆后繼的維護困境中。

我們往往非常重視項目邏輯的復雜性,卻不能好好的把“簡單”的命名做好。

其實,如果簡單的東西都做不好,那么做出再復雜的東西那也是垃圾。

 

 
 
 

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日韩经典中文字幕| 成人欧美一区二区三区在线湿哒哒| 国产日韩视频在线观看| 午夜精品久久久99热福利| 亚洲免费av网址| 97免费视频在线播放| 岛国av一区二区三区| www国产精品com| 国产91精品高潮白浆喷水| 亚洲区在线播放| 国产日韩欧美日韩| 成人黄色免费看| 欧美三级欧美成人高清www| 国产精品久久久av| 日韩在线视频一区| 91成品人片a无限观看| 欧美激情一区二区三级高清视频| 有码中文亚洲精品| 奇米成人av国产一区二区三区| 欧美日韩激情视频8区| 成人在线观看视频网站| 国产精品jvid在线观看蜜臀| 日韩免费观看网站| 国产精品专区第二| www.国产精品一二区| 久久久久久久激情视频| 亚洲国产成人久久综合| 国产专区精品视频| 亚洲三级黄色在线观看| 91精品国产综合久久香蕉| 国产精品综合不卡av| 欧美成人在线网站| 国色天香2019中文字幕在线观看| 亚洲成人1234| 激情成人中文字幕| 国产一区二区视频在线观看| 亚洲精品福利视频| 久久久精品国产一区二区| 日本高清视频精品| 欧美xxxx18国产| 日韩成人小视频| 欧美日韩一区二区三区| 疯狂做受xxxx高潮欧美日本| 久久手机免费视频| 国产中文字幕日韩| 成人黄色大片在线免费观看| 久久6免费高清热精品| 韩国三级电影久久久久久| 一本色道久久88亚洲综合88| 亚洲人午夜精品免费| 亚洲国产精品久久久久秋霞蜜臀| 性欧美暴力猛交69hd| 亚洲男人天堂九九视频| 亚洲三级av在线| 97在线视频精品| 欧美大片在线看| 热re91久久精品国99热蜜臀| 国产精品免费久久久| 日韩精品在线免费观看视频| 国产亚洲精品久久久久动| 亚洲v日韩v综合v精品v| 日韩亚洲在线观看| 懂色aⅴ精品一区二区三区蜜月| 日韩av在线电影网| 欧美亚洲免费电影| 91在线视频一区| 欧美黑人国产人伦爽爽爽| 中文欧美在线视频| 亚洲va男人天堂| 久久久999成人| 最近的2019中文字幕免费一页| 成人黄色短视频在线观看| 亚洲欧美制服丝袜| 日韩av免费在线观看| 欧美尺度大的性做爰视频| 国内精久久久久久久久久人| 97人人做人人爱| 日韩欧美国产成人| 亚洲一区二区自拍| 精品一区二区亚洲| 国产成人一区三区| 亚洲一区二区三区在线视频| 亚洲欧美国产一本综合首页| 国产视频精品久久久| 亚洲人成伊人成综合网久久久| 在线观看精品自拍私拍| 亚洲图中文字幕| 欧美美女18p| 久久久久久久久久国产| 亚洲国产精品热久久| 日韩欧美亚洲国产一区| 国内精品久久久久久久久| 亚洲激情在线视频| 午夜精品久久久久久久99热浪潮| 日本精品视频在线观看| 亚洲精品久久久久久下一站| 97国产suv精品一区二区62| 国产精品久久久久免费a∨| 亚洲欧美制服中文字幕| 国产精品久久久久7777婷婷| 日韩大陆欧美高清视频区| 亚洲日本成人网| 亚洲第一色中文字幕| 欧美大尺度激情区在线播放| 欧美丝袜美女中出在线| 成人免费高清完整版在线观看| 国内精品久久久久久久久| 久久久久北条麻妃免费看| 欧美日韩人人澡狠狠躁视频| 日本一欧美一欧美一亚洲视频| 久久久精品亚洲| 亚洲在线免费视频| 美女黄色丝袜一区| 久久综合久久美利坚合众国| 欧洲精品久久久| 亚洲a区在线视频| 成人免费视频网址| 国产精品亚洲аv天堂网| 亚洲女人初尝黑人巨大| 欧美午夜影院在线视频| 欧美午夜精品久久久久久浪潮| 日韩在线激情视频| 欧美激情网友自拍| 久久精品国产亚洲精品| 久久久久久久久国产| 国产日韩在线精品av| 色系列之999| 亚洲人成啪啪网站| 日韩美女av在线免费观看| 国产精品久久久| 国产亚洲综合久久| 亚洲成人三级在线| 国产精品青草久久久久福利99| 欧美精品18videosex性欧美| 亚洲精品99久久久久中文字幕| 日韩av在线电影网| 欧美一区二区三区图| 中文字幕日韩欧美精品在线观看| 精品国产视频在线| 亚洲国产另类 国产精品国产免费| 性欧美视频videos6一9| 92国产精品久久久久首页| 不卡av在线网站| 欧美孕妇毛茸茸xxxx| 欧美黑人狂野猛交老妇| 国产精品aaa| 最近2019中文字幕第三页视频| 成人a视频在线观看| 久久精品国产成人精品| 国产精品美女主播在线观看纯欲| 欧美精品九九久久| 久久久久免费视频| 欧美午夜激情在线| 日韩精品极品视频免费观看| 亚洲精品mp4| 国产精品日本精品| 欧美精品在线免费观看| 中文字幕一区二区三区电影| 96pao国产成视频永久免费| 日韩视频一区在线| 久久久国产91| 中文字幕亚洲自拍| 国产精品99久久久久久人| 青青草国产精品一区二区|