ObjC编码规范总结

命名规范

采用驼峰命名法,长度为可读性高和同时能够防止命名冲突为佳

常量命名

//常量命名前面加上小写字母'k'开头作为标记,如
static const NSTimeInterval kDropDownAnimationDuration = 0.5;

//作为NSDictionary或者NSNotificationCenter以及其对象的Key值时候,最好加上'const'防止被修改
NSString *const UIApplicationDidFinishedLaunchNotification = @"UIApplicationDidFinishedLaunchNotification"

变量和对象命名

全局变量
//变量命名推荐采用 修饰作用 + 类型
UILabel *episodeNameLabel;
UIButton *showEpisodeDetailInfoButton;

//如果不能通过名字比较准确说明作用的,可以添加简洁注释
UIView *_topContainerView; //顶部3个按钮的容器View
局部变量
//局部变量,可稍微简单些,但是尽量避免出现temp,view1,view2等很模糊的名字
对象命名
//对象命名时注意属性,私有熟悉尽量不在.h 文件中暴露,对.h是否加readonly等不作强制性要求
@property (nonatomic, copy,) NSString *deviceNamestring;

枚举命名

//枚举名字命名时候加上类名前缀
//枚举类型命名是需要类名为前缀并且加上操作的说明
typedef NS_ENUM(NSUInteger, VODPlayType)
{
    VODPlayTypeSoapOpera = 1, //连续剧
    VODPlayTypeVarity = 2, //综艺
    VODPlayTypeMovie = 3, //电影
};

类命名

//类名名推荐 功能 + superClass, 也可以加上自己的标示符在最前面作为前缀
MBLoadingView,
STMovieTableCellView,
LiveAndLookbackViewController,

方法命名

//格式如下,方法名需要能够表达方法作用,参数名字也要能够准确描述参数
- (void)chooseLookBackDay:(UIButton *)lookBackDayBtn
{

}

//两个方法采用一行空格隔开
- (void)changelookBackDayPageBy:(UIButton *)lookBackDayBtn
{

}
//模块作用相似的多个方法放在尽量写在一起

编码规范

主要的目的就是 ‘易阅读,易维护’,最后再说易复用和扩展的问题

判定nil或者YES/NO

//推荐
if (videoObject){...}
if (!videoObject){...}

//不推荐
if (videoObject == nil){...}

//推荐
if (isValidatePhoneNumber){...}

//不推荐
if (isValidatePhoneNumber == YES){...}

条件赋值

//涉及到三目的时候,尽量将条件括起来
isValidatePhoneNumber = (x > 0) ? YES : NO;

//如果设计到判定条件较长的,不推荐使用三目运算,可读性较差,例如:
self.name = ([object.name rangeOfString:@"x"].length != 0) ? [object.name subStringToIndex:5] : @"name";

BOOL赋值

//推荐
BOOL isAdult = age > 18;

//不推荐
BOOL isAdult;
if (age > 19) {
   isAdult = YES;
}else{
   isAdult = NO;
}

复杂的条件判断

//推荐
+ (BOOL)isEmptyString:(NSString *)string;
{
    if (!string) return YES;
    if ([string isKindOfClass:[NSNull class]]) return YES;
    if (string.length == 0) return YES;

    return NO;
}

//不推荐
+ (BOOL)isEmptyString:(NSString *)string;
{
    if (!string || [string isKindOfClass:[NSNull class]] || string.length == 0)
    {
        return YES;
    }
    return NO;
}

嵌套判断

//推荐
{
    if (!user.UserName) return NO;
    if (!user.Password) return NO;
    if (!user.Email) return NO;

    return YES;
}

//不推荐
{
    BOOL isValid = NO;
    if (user.UserName)
    {

        if (user.Password)
        {
            !!!只有一行语句的时候注意括号千万不能省,一定要写上
            if (user.Email) isValid = YES;
        }

    }
    return isValid;
}

注释规范

接口或方法注释

外部接口必须添加注释

快速注释插件可使用https://github.com/onevcat/VVDocumenter-Xcode

/**
 *  首页每个分类的热门推荐列表
 *
 *  @param frame          列表大小
 *  @param media_asset_id 分类id
 *  @param category_id    栏目id
 *
 *  @return 启动了网络请求的列表
 */
- (id)initWithFrame:(CGRect)frame mediaAssetId:(NSString *)media_asset_id categoryId:(NSString *)category_id;

Bug修改注释

涉及到逻辑修改的必须加上注释

//例如
//begin 姓名 10-22
//修改原因
...
... (中间添加修改的代码)
...
//end

SVN代码提交注释

项目版本号(我们开发的小版本号)和修改的内容

如:

V 1.5.2

1. 修改了XXXX
2. 添加了XXXX

资源添加

图片添加

同一模块图片放在同一个文件夹下
图片添加时候需要根据具体用途命名,例如当前的图片属于主页Home,则推荐命名为 类名 + 作用,

如:
Home_Back_Image.png
Home_Play_Image.png

多语言添加

模块间使用空格隔开,并且添加简单说明

//推荐
"Share_Tips" = "...";
"Sms_Message_Send_OK"="...";
"Sms_Message_Send_Failed"="...";

//购买流量
"Open_Traffic_Tips" = "...";
"Open" = "...";

第三方开源库添加

添加到统一的文件夹中,使用group包裹.

扩展

http://www.cocoachina.com/ios/20150508/11780.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值