iOS命名

通用的約定


盡可能遵守 Apple 的命名約定,尤其是和 內(nèi)存管理規(guī)則 (NARC) 相關(guān)的地方。
推薦使用長的、描述性的方法和變量名。
推薦:

UIButton *settingsButton;

不推薦:

UIButton *setBut;

常量


常量應(yīng)該以駝峰法命名,并以相關(guān)類名作為前綴。
推薦:

static const NSTimeInterval ZOCSignInViewControllerFadeOutAnimationDuration = 0.4;

不推薦:

static const NSTimeInterval fadeOutTime = 0.4;

推薦使用常量來代替字符串字面值和數(shù)字,這樣能夠方便復(fù)用,而且可以快速修改而不需要查找和替換。常量應(yīng)該用 static 聲明為靜態(tài)常量,而不要用 #define ,除非它明確的作為一個宏來使用。
推薦:

static NSString * const ZOCCacheControllerDidClearCacheNotification = @"ZOCCacheControllerDidClearCacheNotification";
static const CGFloat ZOCImageThumbnailHeight = 50.0f;

不推薦:

#define CompanyName @"Apple Inc."
#define magicNumber 42

常量應(yīng)該在頭文件中以這樣的形式暴露給外部:

extern NSString *const ZOCCacheControllerDidClearCacheNotification;

并在實現(xiàn)文件中為它賦值。
只有公有的常量才需要添加命名空間作為前綴。盡管實現(xiàn)文件中私有常量的命名可以遵循另外一種模式,你仍舊可以遵循這個規(guī)則。

方法


方法名與方法類型 (- /+ 符號)之間應(yīng)該以空格間隔。方法段之間也應(yīng)該以空格間隔(以符合 Apple 風(fēng)格)。參數(shù)前應(yīng)該總是有一個描述性的關(guān)鍵詞。
盡可能少用 "and" 這個詞。它不應(yīng)該用來闡明有多個參數(shù),比如下面的 initWithWidth:height: 這個例子:
推薦:

- (void)setExampleText:(NSString *)text image:(UIImage *)image;
- (void)sendAction:(SEL)aSelector to:(id)anObject forAllCells:(BOOL)flag;
- (id)viewWithTag:(NSInteger)tag;
- (instancetype)initWithWidth:(CGFloat)width height:(CGFloat)height;

字面值


使用字面值來創(chuàng)建不可變的 NSString , NSDictionary , NSArray ,和 NSNumber 對象。注意不要將 nil 傳進(jìn) NSArray 和NSDictionary 里,因為這樣會導(dǎo)致崩潰。
例子:

NSArray *names = @[@"Brian", @"Matt", @"Chris", @"Alex", @"Steve", @"Paul"];
NSDictionary *productManagers = @{@"iPhone" : @"Kate", @"iPad" : @"Kamal", @"Mobile Web" : @"Bill"};
NSNumber *shouldUseLiterals = @YES;
NSNumber *buildingZIPCode = @10018;

不要這樣:

NSArray *names = [NSArray arrayWithObjects:@"Brian", @"Matt", @"Chris", @"Alex", @"Steve", @"Paul", nil];
NSDictionary *productManagers = [NSDictionary dictionaryWithObjectsAndKeys: @"Kate", @"iPhone", @"Kamal", @"iPad", @"Bill", @"Mobile Web", nil];
NSNumber *shouldUseLiterals = [NSNumber numberWithBool:YES];
NSNumber *buildingZIPCode = [NSNumber numberWithInteger:10018];

如果要用到這些類的可變副本,我們推薦使用 NSMutableArray , NSMutableString 這樣的類。
應(yīng)該避免下面這樣:

NSMutableArray *aMutableArray = [@[] mutableCopy];

上面這種書寫方式的效率和可讀性的都存在問題。
效率方面,一個不必要的不可變對象被創(chuàng)建后立馬被廢棄了;雖然這并不會讓你的 App 變慢(除非這個方法被頻繁調(diào)用),但是確實沒必要為了少打幾個字而這樣做。

可讀性方面,存在兩個問題:第一個問題是當(dāng)你瀏覽代碼并看見 @[] 的時候,你首先聯(lián)想到的是 NSArray 實例,但是在這種情形下你需要停下來深思熟慮的檢查;另一個問題是,一些新手以他的水平看到你的代碼后可能會對這是一個可變對象還是一個不可變對象產(chǎn)生分歧。他/她可能不熟悉可變拷貝構(gòu)造的含義(這并不是說這個知識不重要)。當(dāng)然,不存在絕對的錯誤,我們只是討論代碼的可用性(包括可讀性)。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 禪與 Objective-C 編程藝術(shù) (Zen and the Art of the Objective-C C...
    GrayLand閱讀 1,761評論 1 10
  • 為什么Objecive-C中的很多類名都是NS開頭的呢? 我保證在你第一次給別人介紹Objective-C的時候肯...
    BairdWeng閱讀 4,768評論 0 2
  • 小駝峰命名法(CamelCase):第一個單詞小寫字母開頭,其他單詞首字母大寫;大駝峰命名法(PascalCase...
    Paco_Ke閱讀 779評論 2 0
  • 1. 前言: 命名規(guī)則對于維護(hù)代碼來說是非常重要的,Objective-C方法名往往很長,不過這也有好處,可以更清...
    獨酌丿紅顏閱讀 6,635評論 2 19
  • 多年以前: 當(dāng)我們散步在同一個校園時, 當(dāng)我們在同一個球場上揮汗如雨時, 當(dāng)我們在同一面國旗下,對著校領(lǐng)導(dǎo)挑眉弄眼...
    宿時閱讀 290評論 1 1

友情鏈接更多精彩內(nèi)容