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

  1. 协议(委托)命名
    与类命名相同,此外需添加’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开发规范学习总结与框架搭建相关推荐

  1. IOS开发基础之网易新闻环境搭建异步请求json,AFN网络封装第1天

    IOS开发基础之网易新闻环境搭建异步请求json,AFN网络封装第1天 视频资料是2015年的,但是AFN是导入框架的关键文件,我尝试使用cocoapods安装最新的AFN,虽然成功了,但是版本太高, ...

  2. 0811 iOS开发完整学习路线

    1.iOS开发需要学习哪些内容? 2.开发步骤 3.框架 为了方便开发者开发出强大的功能,苹果提供了各种各样的框架 [1]UIKit:创建和管理应用程序的用户界面 [2]QuartzCore:提供动画 ...

  3. iOS开发网络篇—使用ASI框架进行文件下载

    iOS开发网络篇-使用ASI框架进行文件下载 说明:本文介绍iOS网络编程中经常用到的框架ASI,如何使用该框架进行文件的下载. 一.简单介绍 代码示例: 1 #import "YYView ...

  4. IOS开发基础之使用AFNetworking框架下载服务器资源图片

    IOS开发基础之使用AFNetworking框架下载服务器资源图片 info.plist加入这句 <key>NSAppTransportSecurity</key> <d ...

  5. IOS开发基础之使用AFNetworking框架实现xml文件的解析

    IOS开发基础之使用AFNetworking框架实现xml文件的解析 info.plist加入这行代码 <key>NSAppTransportSecurity</key> &l ...

  6. IOS开发基础之使用AFNetworking框架实现文件上传get和post请求

    IOS开发基础之使用AFNetworking框架实现文件上传get和post请求 AFNetworking框架 请自行从github官网clone.命令为 git clone xxx.xxx是项目的地 ...

  7. iOS开发的学习笔记

    引言 之前做过半年的iOS开发,从完全不懂的移动开发的菜鸟,到完成前端UI开发的菜鸟,做的一些笔记,希望对大家有用,也希望这些总结的东西对以后会有作用. 开发环境 iOS的系统框架分为四个层次: 核心 ...

  8. 阿里巴巴java开发规范学习

    目录 一.编程规约 1.1 命名风格 1.2 常量定义 1.3 代码格式 ​1.4 OOP规约 1.5 集合处理 二.异常 三.MYSQL数据库 3.1 建表规约 3.2 索引规约 3.3 SQL语句 ...

  9. iOS开发 --- 定位功能(系统框架CoreLocation)

    最近在做定位功能,只需要获取当前位置信息,包括经纬度.位置等,不需要持续获取. 对CoreLocation的封装.将定位相关的代码从 Controller 中分离,封装到 NSObject 对象中.采 ...

最新文章

  1. Microbiome:揩老鼠皮毛揩来高分文章——野生哺乳动物的皮肤和肠道微生物群对环境污染做出的反应
  2. 利用mk-table-checksum监测Mysql主从数据一致性操作记录
  3. python目录大纲
  4. java url 上传文件_Java使用HttpURLConnection上传文件(转)
  5. JZOJ 5386. 【NOIP2017提高A组模拟9.23】碎
  6. 解决ActionBar中的不显示View控件
  7. QQ协议TEA加密解密代码 C#
  8. poj 1083 Moving Tables
  9. 最新!2022互联网薪酬盘点,你达标了吗?
  10. 输入手机号码 和 金额有效性的判断
  11. tensorflow--filter、strides
  12. 数据库三范式,轻松理解
  13. WaitForMultipleObjects函数及原子操作Interlocked系列函数
  14. C#使用GET、POST请求获取结果
  15. 图神经网络学习笔记(1)——图信号与图傅里叶变换
  16. 2022年十大数据可视化工具,值得收藏
  17. C语言结构体(Struct)——摘自C语言学习网
  18. 【Win10 + Ubuntu 16.04/18.04双系统 + 双硬盘/单硬盘 安装】传统意义双系统
  19. 推荐17款最好用的跨浏览器测试工具
  20. Access 2007 宝典--学习笔记1(数据库基础)

热门文章

  1. ubuntu18.04LTS每次重启后蓝牙鼠标都要重新连接解决办法
  2. 夜空中星星闪动html,夜空中的星星为什么会一直闪烁?
  3. 图解Javascript核心内容
  4. 大数据系统发展的技术路线
  5. 天猫店铺如何设计详情页?
  6. tp5 三行代码实现调用redis底层的方法
  7. spi.service.contexts.ParameterExpansionContext.findAnnotation(Ljava/lang/Class;)
  8. 机顶盒中间件与API
  9. Gmail Api 的解读及例子
  10. 夺命雷公狗---javascript NO:20 面向对象历史起源