iOS編碼規(guī)范

以下所有純屬個(gè)人習(xí)慣道伟,不喜勿噴

語言:應(yīng)該使用美國(guó)英語命名 如

UIColor? *myColor = [UIColor whiteColor];

而不是:

UIColor *myColour = [UIColor whiteColor];

注釋

1、方法注釋

注釋必須列出 函數(shù)名稱睁蕾、功能描述、輸入?yún)?shù)、返回值描述、修改信息等

備注:方法名稱叠洗、功能描述要正確描述。

/**

* 方法名稱

* 功能描述

*

* @param 輸出參數(shù)1? 輸出參數(shù)描述

* @param 輸出參數(shù)2? 輸出參數(shù)描述

*

* @return 返回值? 返回值描述

*

* 其他說明:如修改信息等

*

*/

2旅东、對(duì)單條語句注釋

注釋應(yīng)與其描述的代碼相近灭抑,對(duì)代碼的注釋應(yīng)該放在其上方或右方相鄰位置,不可放在下面抵代,需與上一行代碼隔開一行空行

/* 代碼段1注釋*/

[代碼段1];

/* 代碼段2 注釋*/

[代碼段2];

3腾节、方法大括號(hào)和其他大括號(hào)(if/else/switch/while 等.)總是在同一行語句打開但在新行中關(guān)閉

應(yīng)該:

if (user.isHappy) {

//Do something

} else {

//Do something else

}

不應(yīng)該:

if (user.isHappy)

{

//Do something

}

else{

//Do something else

}

4、避免以對(duì)齊方式調(diào)用含有block代碼塊的方法

應(yīng)該:

// blocks are easily readable

[UIView animateWithDuration:1.0 animations:^{

// something

} completion:^(BOOL finished) {

// something

}];

不應(yīng)該:

// colon-aligning makes the block indentation hard to read

[UIView animateWithDuration:1.0

animations:^{

// something

}

completion:^(BOOL finished) {

// something

}];

命名

Apple命名規(guī)則盡可能堅(jiān)持長(zhǎng)的,描述性的方法和變量性

//應(yīng)該:

UIButton *settingsButton;

//不應(yīng)該:

UIButton *setBut;

備注:對(duì)于一些特殊類型的變量案腺,命名時(shí)要帶上類型庆冕,如NSArray的變量命名為xxxArray,其他的如xxxDictionary劈榨,xxxSize等访递。這樣就可以從名稱上知道是什么類型的變量。千萬不能將NSArray的變量命名為xxxDictionary同辣。

const 常量命名

常量應(yīng)該使用駝峰式命名規(guī)則拷姿,所有單詞首字母大寫和加上與類名有關(guān)的前綴

//應(yīng)該:

static NSTimeInterval const kRWTTutorialViewControllerNavigationFadeAnimationDuration = 0.3;

//不應(yīng)該:

static NSTimeInterval const fadetime = 1.7;

一些常量前加特殊前綴,可以作為不同常量的區(qū)分邑闺,

如:

/**

* UserDefault Key 的常量前加 ‘kUDK’,

* NotificationName Key 的常量前加‘kNNK’跌前,

* Dictionary Key? ? 的常量前加‘kDICK’,

* Model Key? ? 的常量前加? ? ‘kMDK’,

* Localizable Key? 的常量前加 ‘kLOCK’,

* 第三方服務(wù) Key? ? 的常量前加 ‘kVENDK’,

* 十六進(jìn)制顏色值? ? 的常量前加 ‘kHEXCOR’,

* 圖片資源名字? 的常量前加 ‘kIMGN’

*/

備注:‘k’for? ‘constant’? ‘K’ for ‘key’

宏定義命名

應(yīng)當(dāng)能夠表達(dá)它的用途,并且使用大寫字母表示陡舅,每個(gè)單詞間用’_’分開

如果使用宏定義表示常量則前面必須加k表示理解為常量“constant“,不過建議使用const定義常量

類的命名

1.所有類名均以大寫字母開頭伴挚,多單詞組合時(shí)靶衍,后面單詞首字母大寫。類接口名必須有意義

2茎芋、所有類名前面添加前綴 “RJ”

3.繼承自UIView的類以View結(jié)尾颅眶。

如:RJOperatorUsersInfomationView

4.繼承自ViewController的類以ViewController結(jié)尾。

如:RJHomeViewController

5.所有保存數(shù)據(jù)的實(shí)體以Model結(jié)尾田弥。

如:RJUserModel

屬性也是使用駝峰式

對(duì)于屬性的實(shí)例化涛酗,我們應(yīng)該盡可能使用延遲實(shí)例

@property (strong , nonatomic) UIView *descriptionView;

//應(yīng)該:

- (UIView *)descriptionView {

if (!_descriptionView) {

_descriptionView = [[UIView alloc] init];

}

return _descriptionView;

}

//不應(yīng)該

self.descriptionView = [[UIView alloc] init];

下劃線

當(dāng)使用屬性時(shí),實(shí)例變量應(yīng)該使用’self.’來訪問和改變偷厦。

備注:在初始化方法里商叹,實(shí)例變量(如:_variableName)應(yīng)該直接被使用來避免getters/setters潛在的副作用。

局部變量不應(yīng)該包含下劃線只泼。

方法

在方法簽名中剖笙,應(yīng)該在方法類型(-/+ 符號(hào))之后有一個(gè)空格。在方法各個(gè)段之間應(yīng)該也有一個(gè)空格(符合Apple的風(fēng)格)请唱。在參數(shù)之前應(yīng)該包含一個(gè)具有描述性的關(guān)鍵字來描述參數(shù)弥咪。

"and"這個(gè)詞的用法應(yīng)該保留。它不應(yīng)該用于多個(gè)參數(shù)來說明十绑,就像initWithWidth:height以下這個(gè)例子:

//應(yīng)該:

- (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;

//不應(yīng)該:

-(void)setT:(NSString *)text i:(UIImage *)image;

- (void)sendAction:(SEL)aSelector :(id)anObject :(BOOL)flag;

- (id)taggedView:(NSInteger)tag;

- (instancetype)initWithWidth:(CGFloat)width andHeight:(CGFloat)height;

- (instancetype)initWith:(int)width and:(int)height;? // Never do this.

變量

1.變量盡量以描述性的方式來命名聚至。單個(gè)字符的變量命名應(yīng)該盡量避免,除了在for()循環(huán)本橙。

2.星號(hào)表示變量是指針扳躬。例如, NSString *text 既不是 NSString* text 也不是 NSString * text,除了一些特殊情況下常量坦报。

3.私有屬性應(yīng)該盡可能代替實(shí)例變量的使用库说。盡管使用實(shí)例變量是一種有效的方式,但更偏向于使用屬性來保持代碼一致性片择。

//應(yīng)該:

@interface RWTTutorial : NSObject

@property (nonatomic, strong) NSString *tutorialName;

@end

//不應(yīng)該:

@interface RWTTutorial : NSObject {

NSString *tutorialName;

}

屬性特性

所有屬性特性應(yīng)該顯式地列出來潜的,有助于新手閱讀代碼。屬性特性的順序應(yīng)該是nullable,nonatomic,readonly,strong

字管,與在APPLE 本身框架庫代碼一致啰挪。

//應(yīng)該:

@property (nonatomic, weak) IBOutlet UIView *containerView;

@property (nonatomic) NSString *tutorialName;

//不應(yīng)該:

@property (weak, nonatomic) IBOutlet UIView *containerView;

@property (strong, nonatomic) NSString *tutorialName;

代碼組織

在函數(shù)分組和protocol/delegate實(shí)現(xiàn)中使用 ‘#pragma mark – ’來分類方法,要遵守以下一般的結(jié)構(gòu):

#pragma mark - Lifecycle

- (instancetype)init {}

- (void)dealloc {}

- (void)viewDidLoad {}

- (void)viewWillAppear:(BOOL)animated {}

- (void)didReceiveMemoryWarning {}

#pragma mark - IBActions

- (IBAction)submitData:(id)sender {}

#pragma mark - Public

- (void)publicMethod {}

#pragma mark - Private

- (void)privateMethod {}

#pragma mark - Protocol conformance

#pragma mark - UITextFieldDelegate

#pragma mark - UITableViewDataSource

#pragma mark - UITableViewDelegate

#pragma mark - NSCopying

- (id)copyWithZone:(NSZone *)zone {}

#pragma mark - NSObject

- (NSString *)description {}

#pragma mark - Custom Accessors

- (void)setCustomProperty:(id)value {}

- (id)customProperty {}

黃金路徑

當(dāng)使用條件語句編碼時(shí)嘲叔,上邊的代碼應(yīng)該是"golden" 或 "happy"路徑亡呵。也就是不要嵌套if語句,多個(gè)返回語句也是OK硫戈。


//應(yīng)該:

- (void)someMethod {

if (![someOther boolValue]) {

return;

}

//Do something important

}


//不應(yīng)該:

- (void)someMethod {

if ([someOther boolValue]) {

//Do something important

}

}

換行符

換行符是一個(gè)很重要的主題锰什,因?yàn)樗娘L(fēng)格指南主要為了打印和網(wǎng)上的可讀性。

例如:

self.productsRequest = [[SKProductsRequest alloc] initWithProductIdentifiers:productIdentifiers];

//一行很長(zhǎng)的代碼應(yīng)該分成兩行代碼丁逝,下一行用兩個(gè)空格隔開汁胆。

self.productsRequest = [[SKProductsRequest alloc]

initWithProductIdentifiers:productIdentifiers];

Init方法

Init方法應(yīng)該遵循Apple生成代碼模板的命名規(guī)則,返回類型應(yīng)該使用instancetype而不是id霜幼。

- (instancetype)init {

self = [super init];

if (self) {

// ...

}

return self;

}



類構(gòu)造方法

當(dāng)類構(gòu)造方法被使用時(shí)嫩码,它應(yīng)該返回類型是instancetype而不是id。這樣確保編譯器正確地推斷結(jié)果類型罪既。

@interface Airplane

+ (instancetype)airplaneWithType:(RWTAirplaneType)type;

@end

修改規(guī)范

1铸题、新增代碼行

新增代碼行的前后應(yīng)有注釋行說明。

//修改人琢感,修改時(shí)間丢间,修改說明

新增代碼行

//修改結(jié)束

2、刪除代碼行

刪除代碼向的前后用注釋行說明

//修改人猩谊,修改時(shí)間千劈,修改說明

要?jiǎng)h除的代碼行(將要?jiǎng)h除的語句進(jìn)行注釋)

//修改結(jié)束

3、修改代碼行

修改代碼行以注釋舊代碼行后再新增代碼行的方式進(jìn)行牌捷。

//修改人墙牌,修改時(shí)間,修改說明

//修改前代碼行開始

//修改前代碼行

//修改前代碼行結(jié)束

//修改后代碼行開始

修改后代碼行

//修改結(jié)束

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末暗甥,一起剝皮案震驚了整個(gè)濱河市喜滨,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌撤防,老刑警劉巖虽风,帶你破解...
    沈念sama閱讀 216,544評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡辜膝,警方通過查閱死者的電腦和手機(jī)无牵,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,430評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來厂抖,“玉大人茎毁,你說我怎么就攤上這事〕栏ǎ” “怎么了七蜘?”我有些...
    開封第一講書人閱讀 162,764評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)墙懂。 經(jīng)常有香客問我橡卤,道長(zhǎng),這世上最難降的妖魔是什么损搬? 我笑而不...
    開封第一講書人閱讀 58,193評(píng)論 1 292
  • 正文 為了忘掉前任碧库,我火速辦了婚禮,結(jié)果婚禮上场躯,老公的妹妹穿的比我還像新娘谈为。我一直安慰自己,他們只是感情好踢关,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,216評(píng)論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著粘茄,像睡著了一般签舞。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上柒瓣,一...
    開封第一講書人閱讀 51,182評(píng)論 1 299
  • 那天儒搭,我揣著相機(jī)與錄音,去河邊找鬼芙贫。 笑死搂鲫,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的磺平。 我是一名探鬼主播魂仍,決...
    沈念sama閱讀 40,063評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼拣挪!你這毒婦竟也來了擦酌?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,917評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤菠劝,失蹤者是張志新(化名)和其女友劉穎赊舶,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,329評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡笼平,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,543評(píng)論 2 332
  • 正文 我和宋清朗相戀三年园骆,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片寓调。...
    茶點(diǎn)故事閱讀 39,722評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡锌唾,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出捶牢,到底是詐尸還是另有隱情鸠珠,我是刑警寧澤,帶...
    沈念sama閱讀 35,425評(píng)論 5 343
  • 正文 年R本政府宣布秋麸,位于F島的核電站渐排,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏灸蟆。R本人自食惡果不足惜驯耻,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,019評(píng)論 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望炒考。 院中可真熱鬧可缚,春花似錦、人聲如沸斋枢。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,671評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽瓤帚。三九已至描姚,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間戈次,已是汗流浹背轩勘。 一陣腳步聲響...
    開封第一講書人閱讀 32,825評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留怯邪,地道東北人绊寻。 一個(gè)月前我還...
    沈念sama閱讀 47,729評(píng)論 2 368
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像悬秉,于是被迫代替她去往敵國(guó)和親澄步。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,614評(píng)論 2 353

推薦閱讀更多精彩內(nèi)容

  • 注釋規(guī)范 文件頭注釋 文件頭注釋采用如下格式搂捧,該注釋由xcode自動(dòng)生成驮俗。如果你對(duì)其他人的原始代碼作出重大的修改,...
    yangzming閱讀 727評(píng)論 0 1
  • 命名 Bundle id命名: 規(guī)則:采用反域名命名規(guī)則允跑,全部使用小寫字母王凑。一級(jí)包名為com搪柑,二級(jí)包名根據(jù)應(yīng)用進(jìn)行...
    Tippi閱讀 1,644評(píng)論 0 2
  • 一.代碼命名 一般性原則 最好是既清晰又簡(jiǎn)短,但不要為簡(jiǎn)短而喪失清晰性索烹。 例如:removeObject:AtIn...
    睡不完懶覺閱讀 1,777評(píng)論 0 16
  • IOS開發(fā)規(guī)范 公司新項(xiàng)目馬上要啟動(dòng)工碾,整理一篇規(guī)范,供參考百姓。 命名規(guī)范 駝峰法渊额,除第一個(gè)單詞之外,其他單詞首字母大...
    面皮大師閱讀 348評(píng)論 0 3
  • 整理了一下 Android 上 View 繪制的流程垒拢,繪制流程圖如下:
    牧秦丶閱讀 216評(píng)論 0 0