iOS开发规范学习总结与框架搭建
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层,超出的必须抽离出中间函数
iOS开发规范学习总结与框架搭建相关推荐
- IOS开发基础之网易新闻环境搭建异步请求json,AFN网络封装第1天
IOS开发基础之网易新闻环境搭建异步请求json,AFN网络封装第1天 视频资料是2015年的,但是AFN是导入框架的关键文件,我尝试使用cocoapods安装最新的AFN,虽然成功了,但是版本太高, ...
- 0811 iOS开发完整学习路线
1.iOS开发需要学习哪些内容? 2.开发步骤 3.框架 为了方便开发者开发出强大的功能,苹果提供了各种各样的框架 [1]UIKit:创建和管理应用程序的用户界面 [2]QuartzCore:提供动画 ...
- iOS开发网络篇—使用ASI框架进行文件下载
iOS开发网络篇-使用ASI框架进行文件下载 说明:本文介绍iOS网络编程中经常用到的框架ASI,如何使用该框架进行文件的下载. 一.简单介绍 代码示例: 1 #import "YYView ...
- IOS开发基础之使用AFNetworking框架下载服务器资源图片
IOS开发基础之使用AFNetworking框架下载服务器资源图片 info.plist加入这句 <key>NSAppTransportSecurity</key> <d ...
- IOS开发基础之使用AFNetworking框架实现xml文件的解析
IOS开发基础之使用AFNetworking框架实现xml文件的解析 info.plist加入这行代码 <key>NSAppTransportSecurity</key> &l ...
- IOS开发基础之使用AFNetworking框架实现文件上传get和post请求
IOS开发基础之使用AFNetworking框架实现文件上传get和post请求 AFNetworking框架 请自行从github官网clone.命令为 git clone xxx.xxx是项目的地 ...
- iOS开发的学习笔记
引言 之前做过半年的iOS开发,从完全不懂的移动开发的菜鸟,到完成前端UI开发的菜鸟,做的一些笔记,希望对大家有用,也希望这些总结的东西对以后会有作用. 开发环境 iOS的系统框架分为四个层次: 核心 ...
- 阿里巴巴java开发规范学习
目录 一.编程规约 1.1 命名风格 1.2 常量定义 1.3 代码格式 1.4 OOP规约 1.5 集合处理 二.异常 三.MYSQL数据库 3.1 建表规约 3.2 索引规约 3.3 SQL语句 ...
- iOS开发 --- 定位功能(系统框架CoreLocation)
最近在做定位功能,只需要获取当前位置信息,包括经纬度.位置等,不需要持续获取. 对CoreLocation的封装.将定位相关的代码从 Controller 中分离,封装到 NSObject 对象中.采 ...
最新文章
- Microbiome:揩老鼠皮毛揩来高分文章——野生哺乳动物的皮肤和肠道微生物群对环境污染做出的反应
- 利用mk-table-checksum监测Mysql主从数据一致性操作记录
- python目录大纲
- java url 上传文件_Java使用HttpURLConnection上传文件(转)
- JZOJ 5386. 【NOIP2017提高A组模拟9.23】碎
- 解决ActionBar中的不显示View控件
- QQ协议TEA加密解密代码 C#
- poj 1083 Moving Tables
- 最新!2022互联网薪酬盘点,你达标了吗?
- 输入手机号码 和 金额有效性的判断
- tensorflow--filter、strides
- 数据库三范式,轻松理解
- WaitForMultipleObjects函数及原子操作Interlocked系列函数
- C#使用GET、POST请求获取结果
- 图神经网络学习笔记(1)——图信号与图傅里叶变换
- 2022年十大数据可视化工具,值得收藏
- C语言结构体(Struct)——摘自C语言学习网
- 【Win10 + Ubuntu 16.04/18.04双系统 + 双硬盘/单硬盘 安装】传统意义双系统
- 推荐17款最好用的跨浏览器测试工具
- Access 2007 宝典--学习笔记1(数据库基础)
热门文章
- ubuntu18.04LTS每次重启后蓝牙鼠标都要重新连接解决办法
- 夜空中星星闪动html,夜空中的星星为什么会一直闪烁?
- 图解Javascript核心内容
- 大数据系统发展的技术路线
- 天猫店铺如何设计详情页?
- tp5 三行代码实现调用redis底层的方法
- spi.service.contexts.ParameterExpansionContext.findAnnotation(Ljava/lang/Class;)
- 机顶盒中间件与API
- Gmail Api 的解读及例子
- 夺命雷公狗---javascript NO:20 面向对象历史起源