iOS开发规范

2020-07-05  本文已影响0人  快乐灬玩耍

前 言

define ANIMATION_DURATION 0.3

define MY_MIN(A, B) ((A)>(B)?(B):(A))

//局部类型常量
static const NSTimeInterval kAnimationDuration = 0.3;
//外部可见类型常量
//EOCViewClass.h
extern const NSTimeInterval EOCViewClassAnimationDuration;
extern NSString *const EOCViewClassStringConstant; //字符串类型
//EOCViewClass.m
const NSTimeInterval EOCViewClassAnimationDuration = 0.3;
NSString *const EOCViewClassStringConstant = @"EOCStringConstant";
6、Enum

@protocol UITableViewDelegate<NSObject, UIScrollViewDelegate>
@optional
//使用didwill通知Delegate

import <QuartzCore>;

// Models

import "NYTUser.h"

// Views

import "NYTButton.h"

import "NYTUserView.h"

2、属性注释
写在属性之后,用两个空格隔开
==例:==
@property (nonatomic, readwrite, strong) UIView *headerView; //注释
3、方法声明注释:
一个函数(方法)必须有一个字符串文档来解释,除非它:

pragma mark - Life Cycle Methods

pragma mark - Override Methods

pragma mark - Intial Methods

pragma mark - Network Methods

pragma mark - Target Methods

pragma mark - Public Methods

pragma mark - Private Methods

pragma mark - UITableViewDataSource

pragma mark - UITableViewDelegate

pragma mark - Lazy Loads

pragma mark - NSCopying

pragma mark - NSObject Methods

5、大括号写法

BOOL finalCondition = condition1 && condition2 && condition3 && condition4
if (finalCondition) {
// Do something
}

if ([self canDelete]){
// Do something
}

for (int index = 0; index < 10; index++){
...
logicToChange(index)
}
②、避免使用continue和break。
continue和break所描述的是“什么时候不做什么”,所以为了读懂二者所在的代码,我们需要在头脑里将他们取反。
其实最好不要让这两个东西出现,因为我们的代码只要体现出“什么时候做什么”就好了,而且通过适当的方法,是可以将这两个东西消灭掉的:

②、使用枚举类型时,不能有default分支, 除了使用枚举类型以外,都必须有default分支

RWTLeftMenuTopItemType menuType = RWTLeftMenuTopItemMain;
switch (menuType) {
case RWTLeftMenuTopItemMain: {
// ...
break;
}
case RWTLeftMenuTopItemShows: {
// ...
break;
}
case RWTLeftMenuTopItemSchedule: {
// ...
break;
}
}
在Switch语句使用枚举类型的时候,如果使用了default分支,在将来就无法通过编译器来检查新增的枚举类型了。
4、函数
①、一个函数只做一件事(单一原则)
每个函数的职责都应该划分的很明确(就像类一样)。
==推荐:==
dataConfiguration()
viewConfiguration()
==不推荐:==
void dataConfiguration()
{
...
viewConfiguration()
}
②、对于有返回值的函数(方法),每一个分支都必须有返回值
==推荐:==
int function()
{
if(condition1){
return count1
}else if(condition2){
return count2
}else{
return defaultCount
}
}
==不推荐:==
int function()
{
if(condition1){
return count1
}else if(condition2){
return count2
}
}
③、对输入参数的正确性和有效性进行检查,参数错误立即返回
==推荐:==
void function(param1,param2)
{
if(param1 is unavailable){
return;
}
if(param2 is unavailable){
return;
}
//Do some right thing
}
④、如果在不同的函数内部有相同的功能,应该把相同的功能抽取出来单独作为另一个函数
原来的调用:
void logic() {
a();
b();
if (logic1 condition) {
c();
} else {
d();
}
}
将a,b函数抽取出来作为单独的函数
void basicConfig() {
a();
b();
}
void logic1() {
basicConfig();
c();
}
void logic2() {
basicConfig();
d();
}
⑤、将函数内部比较复杂的逻辑提取出来作为单独的函数
一个函数内的不清晰(逻辑判断比较多,行数较多)的那片代码,往往可以被提取出去,构成一个新的函数,然后在原来的地方调用它这样你就可以使用有意义的函数名来代替注释,增加程序的可读性。
举一个发送邮件的例子:
openEmailSite();
login();
writeTitle(title);
writeContent(content);
writeReceiver(receiver);
addAttachment(attachment);
send();
中间的部分稍微长一些,我们可以将它们提取出来:
void writeEmail(title, content,receiver,attachment)
{
writeTitle(title);
writeContent(content);
writeReceiver(receiver);
addAttachment(attachment);
}
然后再看一下原来的代码:
openEmailSite();
login();
writeEmail(title, content,receiver,attachment)
send();

上一篇 下一篇

猜你喜欢

热点阅读