<iOS開發>之規范文檔

一.語言

采用US(美式)英語,不使UK(英式)英語或漢字拼音.

US: UIColor *myColor =[UIColor blueColor];
UK: UIColor *myColour =[UIColor blueColor];
拼音: UIColor *wodeYanSe =[UIColor blueColor];

二.命名規則

1.常量的命名
在前面加上小寫字母k作為標記.其余遵循小駝峰命名法(第一個單詞全部小寫,后面單詞首字母大寫).

NSTimeInterval kAnimationDuration = 0.3;

2.宏的命名
以兩個大寫字母作為前綴,后面遵循大駝峰命名法.

#define KKScreenWidth ([UIScreen mainScreen].bounds.size.width)
#define KKAppVersion @"appVersion"

3.枚舉的命名
遵循Objective-C內部框架定義方式.
Enum中枚舉內容的命名需要以該Enum類型名稱開頭.

typedef NS_ENUM(NSInteger, FulowersMoveDestination)
{
    FulowersMoveDestinationTop,
    FulowersMoveDestinationBottom,
    FulowersMoveDestinationLeft,
    FulowersMoveDestinationRight,
};

4.類的命名
整體采用大駝峰式命名(每個單詞的首字母大寫).
類前綴:采用開發者姓名的首字母大寫.
類后綴:采用對應類的全稱.

NavigationController  導航控制器: LBYNavigationController
ViewController        主頁視圖控制器: LBYHomeViewController
TableViewController   表格控制器: LBYTableViewController
TabBarController      標簽控制器: LBYTabBarController

5.方法的命名
當方法參數在三個以及三個以上,換行保持對齊(冒號對齊,冒號前是參數變量,冒號后是參數值).
方法聲明:

+ (instancetype)initWithPersonName:(NSString *)name
                           withAge:(int)age
                           withSex:(NSString *)sex
                        withHeight:(float)height 
                        withWeight:(float)weight;

方法調用:避免使用冒號對齊的方式.
6.屬性和對象的命名
采用修飾+類型的方式命名,BOOL類型添加is前綴,單詞遵循小駝峰命名法.聲明屬性時,小括號中的順序依次是:nonatomic,readonly,strong.

@property (nonatomic, assign) BOOL isLogin;
@property (nonatomic, weak) UITextField *loginNameTextField;
@property (nonatomic, copy) NSString *studentClientName;
@property (nonatomic, weak) UILabel *loginTipLabel;
@property (nonatomic, weak) UIButton *loginButton;

三.注釋

注釋是為了解釋說明,方法或變量等命名規范合理,清楚易懂,可以不添加注釋,含有復雜邏輯的代碼必須添加注釋.注釋需要實時更新,跟隨代碼的變動進行更改或者刪除.
1.公開類方法注釋
在.h文件中聲明類方法,采用文檔注釋,要寫明方法的具體作用,所有參數的含義以及返回的參數值.

/**
 創建person對象的類方法

 @param name 姓名
 @param age 年齡
 @param sex 性別
 @param height 身高
 @param weight 體重
 @return 返回person類對象
*/
+ (instancetype)initWithPersonName:(NSString *)name
                           withAge:(int)age
                           withSex:(NSString *)sex
                        withHeight:(float)height
                        withWeight:(float)weight;

2.私有的對象方法注釋
在.m文件中實現對象方法,采用文檔注釋, 要寫明方法的具體作用, 如果有參數和返回值,需要添加所有參數的含義以及返回的參數值.

/**
 搭建tableview的UI
*/
- (void)setupTableViewUI

3.方法內部邏輯代碼注釋
復雜邏輯代碼在代碼上方進行注釋,注釋方式采用雙斜杠+單個空格+具體注釋內容

- (void)viewDidLoad
{
    [super ViewDidLoad];
    // 注釋
    if(...)
    {
        ...
    } 
}

4.屬性注釋

/**
 登陸按鈕
*/
@property (nonatomic, weak) UIButton *loginBtn;

5.標記
在函數分組和使用#pragma mark - 給重要邏輯代碼添加標記,方便閱讀

#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 - Custom Protocol
- (void)tabbarBottomView:(LBYTabbarBottomView *)tabbarBottomView didSelectIndex:(NSUInteger)index didSelectBtn:(BYBottomButton *)selectBtn

#pragma mark - UITextFieldDelegate
- (void)textViewDidBeginEditing:(UITextView *)textView;
- (void)textViewDidEndEditing:(UITextView *)textView;
    
#pragma mark - UITableViewDataSource
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section;
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath;
    
#pragma mark - UITableViewDelegate
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath;

#pragma mark - NSObject
- (NSString *)description 

6.打印
關于NSLog,在項目或者SDK完成最終版本時,需要去掉打印的注釋(可以使用pch預編譯文件來禁止NSLog打印)

四.格式化

1.賦值
在”=”號左右兩邊各間隔一個空格.

static const int count = 0; 

類方法或對象方法
方法的”+/-”號和左側小括號間隔一個空格,大括號換行,上下大括號對齊.

- (void)viewDidLoad 
{

}

2.屬性聲明
property和左側小括號間隔一個空格,逗號和下一個屬性修飾符間隔一個空格,右側小括號和屬性類型間隔一個空格,屬性類型和屬性變量間隔一個空格.聲明字符串類型時,NSString和號間隔一個空格,號和屬性變量相連,應是NSString *studentClientName,不是NSString* studentClientName,也不是NSString * studentClientName.

@property (nonatomic, assign, readwrite) BOOL isLogin;
@property (nonatomic, copy, readwrite) NSString *studentClientName;

3.for循環
for和左側小括號間隔一個空格, i和”<=”間隔一個空格, ”<=”和”3”間隔一個空格, ”3”后面緊跟著封號 ,封號和i間隔一個空格.大括號換行,一對大括號上下位置對齊.

for (int i = 0; i <= 3; i++)
{
    // 語句
}

4.條件語句
關于大括號,任何需要大括號的都不能省略.
采用

if (isLogin)
{   
    return success;
}

不是

if (isLogin)
    return success;

也不是

if (isLogin) return success;

5.case語句
當一個case語句包含多行代碼時,大括號應該加上.如case 2所示.

switch (condition) 
{
    case 1:  
        // ...
        break;  
    case 2: 
    {
        // ...  
        // Multi-line example using braces  
        break;  
    }  
    case 3:   
        // ...  
        break;  
    default:   
        // ...  
        break;  
}

當在switch使用枚舉類型時,default是不需要的.

switch (FulowersMoveDestination) 
{
    case FulowersMoveDestinationTop:  
        // ...  
        break;  
    case FulowersMoveDestinationBottom:  
        // ...  
        break;  
    case FulowersMoveDestinationLeft:  
        // ...  
        break;  
    case FulowersMoveDestinationRight:  
        // ...  
        break;  
}

五.單例

統一采用shared+類名作為單例類的方法名

@implementation LBYNetworkTool
+ (instancetype)sharedBYNetworkTool
{
    static LBYNetworkTool *instance;
    {    
        static dispatch_once_t onceToken;
        dispatch_once(&onceToken, ^{        
            instance = [[LBYNetworkTool alloc]init];
        });
    }    
    return instance;
}
@end

六.UI整理

搭建UI時,使用setup作為方法名前綴,將相應UI布局放在對應方法中

- (void)setupTableViewUI
- (void)setupNavigationUI
- (void)setupCollectionViewUI

CSDN

iOS開發之規范文檔

個人博客

iOS開發之規范文檔

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,908評論 6 541
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,324評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事?!?“怎么了?”我有些...
    開封第一講書人閱讀 178,018評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,675評論 1 317
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,417評論 6 412
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,783評論 1 329
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,779評論 3 446
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,960評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,522評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,267評論 3 358
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,471評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,009評論 5 363
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,698評論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,099評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,386評論 1 294
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,204評論 3 398
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,436評論 2 378

推薦閱讀更多精彩內容

  • Spring Cloud為開發人員提供了快速構建分布式系統中一些常見模式的工具(例如配置管理,服務發現,斷路器,智...
    卡卡羅2017閱讀 134,823評論 18 139
  • Android編碼規范 源文件基礎 文件名 源文件以其最頂層的類名來命名,大小寫敏感,文件擴展名為.java。 文...
    呼呼哥閱讀 976評論 0 0
  • 原文: https://github.com/ecomfe/spec/blob/master/javascript...
    zock閱讀 3,391評論 2 36
  • 轉載自:http://www.cocoachina.com/ios/20150508/11780.html,僅僅個...
    前進的碼農閱讀 729評論 0 1
  • 本規范原文來自Github.但是markdown格式有問題,我重新排了下。實際開發中根據具體情況決定如何取舍,但是...
    LeonXtp閱讀 474評論 0 0