您的位置:首页 > 移动开发 > IOS开发

iOS开发规范学习总结与框架搭建

2016-09-07 15:55 295 查看
iOS 开发规范

以MVC开发模式为主,根据模块化+MVC思想

一.模块化思想创建目录路径(创建真实路径,再拖到项目中不要直接创建Group)





M —— 模型,模型对象封装了应用程序的数据,并定义操控和处理该数据的逻辑和运算。

V —— 视图,显示数据,是应用程序中用户可以看见的对象。

C —— 控制器,在应用程序的一个或多个视图对象和一个或多个模型对象之间,控制器对象充当媒介。

SupportingFiles中主要放一下配置文件和头文件

EnumHeader — 主要存放枚举,这里枚举的写法必须用OC的写法,禁止用c的写法

StringHeader — 主要存放title字符串(如:提示语/控制器标题等字符串信息)

CommonHeader — 主要存放公共的配置信息(如:宏定义/基础设置等)

ApiHeader — 主要存放接口参数

二.基础设置

1.xcode设置 屏幕左上角Xode->Perference->Text Editing->”Page guide at column: 80” 打上勾;每一行的代码尽量不要超出80个字的长度,超出的回车排版, 方法名的冒号对齐

2.xcode设置 屏幕左上角Xode->Perference->Text Editing->Indentation,将Tab改成Spaces,并将Tab width和indent width设为4个空格

3.项目名称使用英文

三.规范命名(驼峰法)

1.类命名

采用项目名简称+功能命名方式.首字母大写,每个单纯首字母大写,尽量使用能够反应类功能的名词短语

eg: CRMApplicationController, CRMUserManage, CRMUserData

2.特殊类命名

UIKit里的UI界面部分

控件类型直接使用尾端的驼峰单词

eg: UIView —> xxxView

UIViewController —> xxxController

UIButton —> xxxButton

UILabel —> xxxLabel

UITableViewCell —> xxxCell

3.分类(类别)命名

与类命名相同,此外需添加扩展类名”+”

eg: NSString + Login

协议(委托)命名

与类命名相同,此外需添加’Delegate’后缀

eg: RMUserInfo 对 RMUserInfoDelegate

5.通知命名

通知常用于在模块间传递消息,所以通知要尽可能地表示出发生的事件,通知的命名范式:[ 触发通知的类名 ] + [Did | Will] + [ 动作 ] + Notification

eg: UIApplicationUserDidTakeScreenshotNotification

6.常量的命名最好在前面加上字母k作为标记.(全局常量(通知或者关键字等)尽量用const来定义. 因为如果使用宏定义, 一来宏可能被重定义. 二来引用不同的文件可能会导致宏的不同) 如:

(1) 定义常量

static const NSTimeInterval kAnimationDuration = 0.3;

(2).尽量使用OC的定义方式,避免C的定义方式.(命名:枚举类型命名要加相关类名前缀并且枚举值命名要加枚举类型前缀)如:


typedef NS_ENUM(NSInteger, UIViewAnimationTransition) {

UIViewAnimationTransitionNone,

UIViewAnimationTransitionFlipFromLeft,

UIViewAnimationTransitionFlipFromRight,

UIViewAnimationTransitionCurlUp,

UIViewAnimationTransitionCurlDown,

};

(3).变量和对象的命名采用修饰+类型的方式,如:


UILabel *titleLabel;

UIButton *confirmButton;

UIArray *modelArray;

7.实例变量声明时变量名前面加下划线“_”

UILabel _titleLabel;

8.方法命名

(1).方法一般以小写字母打头,每一个后续的单词首字母大写,方法名中不应该有标点符号(包括下划线),有两个例外:

a.可以用一些通用的大写字母缩写打头方法,比如 PDF,TIFF 等。

b.可以用带下划线的前缀来命名私有方法或者类别中的方法。

(2).如果方法是为了获取对象的一个属性值,直接用属性名称来命名这个方法,注意不要添加 get 或者其他的动词前缀:如:


// 正确,使用属性名来命名方法

- (NSSize)cellSize;

// 错误,添加了多余的动词前缀

- (NSSize)calcCellSize;

(NSSize)getCellSize;

(3).对于有多个参数的方法,务必在每一个参数前都添加关键词,关键词应当清晰说明参数的作用:如:


// 正确,保证每个参数都有关键词修饰

- (void)sendAction:(SEL)aSelector toObject:(id)anObject forAllCells:(BOOL)flag;

// 错误,遗漏关键词

- (void)sendAction:(SEL)aSelector :(id)anObject :(BOOL)flag;

// 正确

- (id)viewWithTag:(NSInteger)aTag;

// 错误,关键词的作用不清晰

(id)taggedView:(int)aTag;

(4).不要用 and 来连接两个参数,通常 and 用来表示方法执行了两个相对独立的操作(从设计上来说,这时候应该拆分成两个独立的方法):


// 错误,不要使用 “and” 来连接参数

- (int)runModalForDirectory:(NSString )path andFile:(NSString )name andTypes:(NSArray *)fileTypes;

// 正确,使用 “and” 来表示两个相对独立的操作

- (BOOL)openFile:(NSString )fullPath withApplication:(NSString )appName andDeactivate:(BOOL)flag;

*方法的参数命名也有一些需要注意的地方 :
和方法名类似,参数的第一个字母小写,后面的每一个单词首字母大写


不要再方法名中使用类似 pointer,ptr 这样的字眼去表示指针,参数本身的类型足以说明

不要使用只有一两个字母的参数名

不要使用简写,拼出完整的单词

不适用 get 前缀来表示属性获取方法

8.宏定义必须使用大写命名,使用_隔开

eg: SCREEN_WIDTH

9.其他方法命名方法以类名+功能为基准

四.编码规范

1.判断语句(格式和判断方式)

Preferred:

if (someObject) {



}

if (!someObject) {



}

Not preferred:
if (someObject == YES)
{
...
}
if (someObject != nil)
{
...
}


2.初始化推荐使用语法糖方式

数组@[@”“,@”“]

字典@{@”“:@”“,@”“:@”“}

3.回调方法(函数调用的可知性, 回调时被调用者要知道其调用者, 方便信息的传递, 所以建议在回调方法中第一个参数中加上调用者)

- (UITableViewCell )tableView:(UITableView )tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath;

4.函数书写

‘-’后面有个空格,第一个大括号‘{’的位置在函数所在行的末尾,同样应该有一个空格,如果传递参数类型是指针,类与*号之间要有空格

eg: - (void)applicationDidEnterBackground:(UIApplication *)application {

}

5.逻辑运算符与代码之间空一格

eg: a ++, a + b,

6.注释(推荐使用VVDocumenter插件)

(1).所有接口类(.h)必须给出必要的注释(接口用’//’,方法用插件’///’功能)

(2).工具类方法必须写出明确注释

(3).删除不必要注释,更改代码后及时更新注释

(4).删除注掉的代码和没有意义的注释

(5).用pragma mark - 来区分不同方法模块

五. 注意(开发提示)

1.如果用到了Observer,至少要在dealloc里移除掉(如果是在ARC中使用,不用调用super方法)

2.当用到addObject或insertObject时注意对NSArray,NSDictionary成员的判空保护

3.加上必要注释(推荐安装 VVDocumenter,进行注释)

4.写delegate的时候类型应该为weak弱引用,以避免循环引用

5.在适当的位置建议加上#pragma mark ,便于阅读代码

6.引入第三方尽量使用cocoaPod

7.不用使用new方法,尽量使用alloc init方法(因为new会在调试内存是出现不可预料问题,也会使人困惑)

8.NSString使用 copy属性

9.避免相同代码段在多个地方出现,相同代码必须归纳出来,有必要的可以用类进行封装

10.语句嵌套层次不得超过3层,超出的必须抽离出中间函数
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息