iOS编码规范
来源:互联网 发布:广州经济开发区知乎 编辑:程序博客网 时间:2024/06/05 08:30
注:有些例子是摘抄的,如有侵权请联系删除,另如有不妥请指正。
一 、尽可能保证 .h文件的简洁性,可以不公开的API和属性就不要公开,写在.m文件中即可;一旦公开,请把注释写详细明了,方便别人调用。
二、.m文件代码结构,如图:
三、命名
1、成员变量前加“_”,类名首字母大写(大驼峰),成员变量及成员方法首字母小写(小驼峰),成员方法中的参数首字母小写(小驼峰),同时尽量让方法的命名读起来像一句话,能够传达出方法的意思,同时取值方法前不要加前缀“get”。
2、常量的命名 k + 类名 + 变量名
static const NSTimeInterval kAnimationDuration = 0.3;
- 若常量作用域超出编译单元(实现文件),需要在类外可见时, 使用extern关键字, 并加上该类名作为前缀. 如
extern NSString *const PGThumbnailSize
- 全局常量(通知或者关键字等)尽量用const来定义. 因为如果使用宏定义, 一来宏可能被重定义. 二来引用不同的文件可能会导致宏的同。
3、枚举的命名 类名前缀 + 变量名
枚举类型命名要加相关类名前缀并且枚举值命名也要加枚举类型前缀.编程中避免使用写死的值,多使用枚举表示状态、选项、状态码,方便阅读,管理。
typedef NS_ENUM(NSInteger, UIViewAnimationTransition) { UIViewAnimationTransitionNone, UIViewAnimationTransitionFlipFromLeft, UIViewAnimationTransitionFlipFromRight, UIViewAnimationTransitionCurlUp, UIViewAnimationTransitionCurlDown,};
4、变量和对象的命名
给一个对象命名时建议采用修饰+类型的方式 titleLabel //表示标题的label, 是UILabel类型
confirmButton //表示确认的button, 是UIButton类型
附一些常用控件的缩写:
四、私有方法
在OC语言中,声明一个方法为私有的,需要把方法写在实现文件里.如何凸显该方法私有的呢?根据笔者的经验,建议大家给方法命名以p_,也可以项目前缀开头.如
// 以p_开头,较为常用,便于开源- (void)p_dealWithDataSource:(NSData *)sourceData {}// 以项目前缀maj(muaijie)开头,也比较常用- (void)maj_dealWithDataSource:(NSData *)sourceData {}
关于前缀还有必要补充说明一下.苹果声明自己始终保有两字前缀,所以在实际开发中尽量使三字前缀,以避免因苹果引入新的API导致的问题.
五、关于注释
- 开头的版权声明
- 在每个文件的头部应简要说明这个文件的指责或者实现的功能
内容注释 分为单行注释和多行注释,择机使用,尽可能把注释写的如同文档一样规范明了。多行注释生成工具我推荐使用VVDocumenter
/** * 特卖活动商品列表 * @param sequencing 排序方式 * @param activityId 专场ID * @param success 成功后返回的data * @param falilure 失败后返回的错误码 * @return 专场商品Model */- (ActivityGoodsList *)getActivityGoodsList:(int)sequencing activityId:(NSString *)activityId Success:(NewHttpSuccess)success Failure:(HttpFailure)falilure{ //}
六、关于多参数的方法的写法,参数冒号对齐,空格恰当。
- (ActivityGoodsList *)getActivityGoodsList:(int)sequencing activityId:(NSString *)activityId Success:(NewHttpSuccess)success Failure:(HttpFailure) falilure{ //}
七、其他
- 项目的目录应该按照功能来划分
- 每一个功能属于一个单独的真实的文件夹,避免使用group导致项目里文件杂乱
- 图片资源文件应该使用Images.xcassets存放管理
- 原则上讲单个 .m 文件代码量不应该超过800行
tips
1、 判断nil或者YES/NO
推荐:
if (someObject) { ... } if (!someObject) { ... }
不推荐:
if (someObject == YES) { ...} if (someObject != nil) { ...}
2、 条件赋值
推荐:
result = object ? : [self createObject];
不推荐:
result = object ? object : [self createObject];
3、 BOOL赋值
推荐:
BOOL isAdult = age > 18;
不推荐:
BOOL isAdult;if (age > 18){ isAdult = YES;}else{ isAdult = NO;}
4、 复杂的条件判断
软件设计的单一职责原则
推荐:
if ([self canDeleteJob:job]) { ... } - (BOOL)canDeleteJob:(Job *)job{ BOOL invalidJobState = job.JobState == JobState.New || job.JobState == JobState.Submitted || job.JobState == JobState.Expired; BOOL invalidJob = job.JobTitle && job.JobTitle.length; return invalidJobState || invalidJob;}
不推荐:
if (job.JobState == JobState.New|| job.JobState == JobState.Submitted|| job.JobState == JobState.Expired|| (job.JobTitle && job.JobTitle.length)){ //....}
5、block防止循环引用的写法
block为了防止循环引用以及提前释放,在block外__weak修饰,block内__strong修饰
__weak typeof(self) weakSelf = self;myObj.myBlock = ^{ __strong typeof(self) strongSelf = weakSelf; if (strongSelf) { [strongSelf doSomething]; // strongSelf != nil // preemption, strongSelf still not nil [strongSelf doSomethingElse]; // strongSelf != nil } else { // Probably nothing... return; }};
0 0
- iOS上编码规范
- iOS 编码规范
- ios 编码规范
- iOS编码规范
- iOS编码规范
- ios编码规范
- ios开发编码规范
- iOS 编码规范
- iOS-CoCoa编码规范
- IOS 编码规范
- iOS编码规范文档
- iOS单元测试编码规范
- iOS单元测试编码规范
- ios 编码规范
- IOS 编码规范建议
- iOS编码规范
- iOS 编码规范
- ios编码规范
- hdoj2035 人见人爱A^B(快速幂+同余定理)
- Java中的hashcode方法
- Valid Anagram
- HDU 1686 Oulipo kmp模板
- 1019. General Palindromic Number (20)
- iOS编码规范
- OpenCV | 滤波
- 一个操作系统的实现--从loader到内核和扩充内核的错误兼参考指令
- 通过异步任务将一张由网络得来图片显示出来
- Gradle学习
- C#中的垃圾回收
- NSCondition的用法
- OpenCV | grabcut
- hdoj1061 Rightmost Digit(快速幂+简单思路)