iOS(Objective-C)编码规范

iOSObjective-C)编码规范

本文件旨在统一****iOS方向编码规范。增强代码可读性,便于后期维护。

一、头文件的导入(#import


写法模板

#import "当前类头发文件"

#import <系统库>

#import <第三方库>

#import “Controller"

#import “View"

#import "Model"

#import "Others"

尽量按照先系统类、第三方类后 Controller、View、Model、Others的顺序导入,中间不能有空格。


建议的写法

#import "PTWFromeViewController.h"

#import

#import "RoadKit.h"

#import "PTWEditEvalController.h" 

#import "PTWDetailController.h"

#import “PTWPeoEditController.h"

#import "UserSelectView.h"

#import "FilesEditView.h"

#import "BillSafetyCell.h"

#import "PTWPeopleCell.h"

#import “BillSolutionDialog.h"

#import "PTWEvaluateModel.h"

#import "PTWApprovalModel.h"

#import "PTWDisclosureModel.h"

#import "BillSignModel.h"

#import “UserDefaultHepler.h"

二、@Class的写法

在.h文件中尽量使用@class,引用头文件


写法模板

@class class1, class2;


建议的写法

@class UIView, UIImage;

三、@Interface的写法


写法模板

@interface 类名 : 父类 <协议1, 协议2>

@interface和类名中间一个空格,类名后加空格 “ : ” 之后空格加上父类加空格加协议。


建议的写法

@interface AppDelegate : UIResponder <UITableViewDataSourse>


不建议的写法

@interface AppDelegate:UIResponder

四、@property的写法


写法模板

@property(关键词, 关键词) 类 *变量名称; // 注释

关键词用,空格分割 类前后空格


建议的写法

@property (nonatomic, copy) NSString  *productID;        //产品标识

@property (nonatomic, copy) NSString  *status;            //状态


不建议的写法

@property (nonatomic,copy) NSString  * productID;        //产品标识

@property (nonatomic,copy)NSString  * status;            //状态

*五、类的功能模块建议按以下方式分组


写法模板

view的生命周期方法

初始化方法

网络请求

各类代理

按钮点击

自定义方法

set/get方法

对于网络请求,做到回调方法尽量跟在请求下面。对于多次调用的同一请求,用方法包起来,放到网络请求部分内,偶尔突然使用的请求可以直接放在发起的位置。


建议的写法

view的生命周期方法(此mark不用写)

#pragma mark - setup

#pragma mark - network

#pragma mark - xxxx

#pragma mark - actions

#pragma mark - accessory

#pragma mark - setter and getter

六、enum的定义

对应的enum写到对应的类中,方便寻找和使用

使用NS _ ENUM和NS _ OPTIONS进行定义


建议的写法

typedef NS_ENUM(NSInteger, UIViewAnimationCurve) {

    UIViewAnimationCurveEaseInOut,        // slow at beginning and end

    UIViewAnimationCurveEaseIn,            // slow at beginning

    UIViewAnimationCurveEaseOut,          // slow at end

    UIViewAnimationCurveLinear,

};

typedef NS_OPTIONS(NSUInteger, UIViewAutoresizing) {

    UIViewAutoresizingNone                = 0,

    UIViewAutoresizingFlexibleLeftMargin  = 1 << 0,

    UIViewAutoresizingFlexibleWidth        = 1 << 1,

    UIViewAutoresizingFlexibleRightMargin  = 1 << 2,

    UIViewAutoresizingFlexibleTopMargin    = 1 << 3,

    UIViewAutoresizingFlexibleHeight      = 1 << 4,

    UIViewAutoresizingFlexibleBottomMargin = 1 << 5

};

不建议的写法

typedef enum {

    GBAppRunDeveloperModeDebug,

    GBAppRunDeveloperModePreRelease,

    GBAppRunDeveloperModeRelease

}GBAppRunDeveloperMode;

七、格式和换行


建议的写法

if (user.isHappy) {

  //Do something

} else {

  //Do something else

}


不建议的写法

if (user.isHappy)

{

    //Do something

}

else {

    //Do something else

}

八、写直观的代码

写代码有一条重要的原则:如果有更加直接,更加清晰的写法,就选择它(即使它有时候看起来更长,更笨,也一样选择它)


建议的写法

- (void)checkUserAuthentication { 

    if (![YJRuntime sharedInstance].currentUser.tpStatus) {

        // TODO:去实名认证

        return;

    }


    if (![YJRuntime sharedInstance].currentUser.payPwdStatus) {

        // TODO:去设置支付密码

        return;

    }


    if (![YJRuntime sharedInstance].currentUser.bankcardStatus) {

        // TODO:去绑定银行卡

        return;

    }


    // TODO: ...

}


不建议的写法

    if ([YJRuntime sharedInstance].currentUser.tpStatus) {

        if ([YJRuntime sharedInstance].currentUser.payPwdStatus) {

            if ([YJRuntime sharedInstance].currentUser.bankcardStatus) {

            // TODO: ...

            } else {

                // TODO:去绑定银行卡

            } 

        } else {

            // TODO:去设置支付密码

        } 

    } else {

        // TODO:去实名认证

    } 

九、其它

1. 方法命名的规范

如果不是写初始化方法不要用init进行开头

如果不是属性的set方法不要用set作为方法的前缀

按钮方法使用按钮名+Click的方式或+DoubleClick


建议的写法

- (void)saveButtonClick:(UIButton *)button {}

2. 控件命名的规范

一定不要单单用首字母简写命名控件(特殊意义的除外,如WTO、RMB等),并且名字后一定要加上控件类型,例如: UILabel结尾加上Label,UIImageView结尾记上ImageView。


建议的写法

@property(nonatomic, strong) UILabel *userNameLabel;

不建议的写法

@property(nonatomic, strong) UILabel *userName;

3. 局部变量

局部的变量在要初始化时,尽量设置默认值(对于一些对象判断是否赋值可以不进行初始化。使用驼峰命名法,命名变量。

4. block的命名

尽量和苹果的命名一致使用completion,也可用Block命名作为参数名结尾。


建议的写法

typedef void(DidUpdateViewWithCompletionHandle)()


不建议的写法

typedef void(DidUpdateViewWithCallBack)()

5. 对于一些状态的判断,使用枚举表示不同的状态

尽量少用根据数字来直接判断不同的状态


建议的写法

typedef NS_ENUM(NSUInteger, HomeViewState) {

    HomeViewStateNoData,

    HomeViewStateFailure,

    HomeViewStateItemList,

    HomeViewStateBannerList

};

switch(state) {

    case HomeViewStateNoData : {

        //显示没数据

        break;

    } 

    case HomeViewStateFailure : {

        //显示请求错误

        break;

    } 

    case HomeViewStateItemList : {

        //显示商品的列表

        break;

    } 

    case HomeViewStateBannerList : {

        //显示banner列表

        break;

    }

    default :

    break;

不建议的写法

if(state == 0) {

  //显示没数据

} else if(state == 1) {

  //显示请求错误

} else if(state == 2) {

  //显示商品的列表

} else if(state == 3) {

  //显示banner列表

} else {

}

此规范为制定阶段可随时更改,欢迎提出合理建议。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 227,022评论 6 528
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 97,760评论 3 412
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 174,687评论 0 373
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 62,318评论 1 307
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 71,112评论 6 405
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 54,645评论 1 320
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 42,724评论 3 435
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 41,885评论 0 285
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 48,387评论 1 330
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 40,368评论 3 354
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 42,506评论 1 365
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 38,063评论 5 355
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 43,759评论 3 343
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 34,150评论 0 25
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 35,414评论 1 281
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 51,080评论 3 386
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 47,494评论 2 370

推荐阅读更多精彩内容