iOS编码规范精简版-根据apple、google等规范总结而来

目录

1.格式和换行
2.命名
3.oc下的cocoa编码规范
4.注释要求
5.其他
6.参考文档
附:ARC下编码注意事项

此文档根据apple、google以及其他一些业界知名的oc编码规范整理而成,并作了大量精简,旨在为大家的iOS开发规范提供一份简单、清晰、统一的参考指南。

1.格式和换行

1.1 只使用2个空格来缩进,不使用tab.
1.2 方法长度不超过100行,建议不超过80行。
1.3 方法- 和 + 和返回值之前为1个空格;方法参数之间有一个空格,其他地方不出现多余的空格。
1.4 条件语句的格式,推荐如下:

if (user.isHappy)
{
  //Do something
}
else
{
  //Do something else
}
或:(苹果官方代码缩进方式)
if (user.isHappy) {
  //Do something
} else {
  //Do something else
}

不推荐如下的缩进:

if (user.isHappy)
{
    //Do something
}
else {
    //Do something else
}

2.命名

2.1 命名统一使用驼峰命名法;只采纳有广为人知含义的缩写,比如info、msg、UI、HTTP这类。自造的缩写不被认可。总体的命名原则是清晰和一致,避免歧义。
2.2 命名类、协议、常量和typedef结构体时考虑使用前缀,主要目的是为了避免冲突。方法名存在特定类的命名空间内,无需使用前缀。
2.3 方法首字母小写(方法以大写缩略词开始除外);文件夹名和类名首字母大写。不使用下划线作为私有方法的前缀,此方式被苹果保留。
2.4 全局常量尽量不要使用宏定义。宏很可能被重定义,而且引用不同的文件可能会导致宏的不同,所以尽量使用const来定义常量。
2.5 避免使用newXXX、getXXX、setXXX来命名变量和方法。

3.oc下的cocoa编码规范

3.1 使用#pragma mark来分类方法,参考以下结构:

#pragma mark - Lifecycle

- (instancetype)init {}
- (void)dealloc {}
- (void)viewDidLoad {}
- (void)viewWillAppear:(BOOL)animated {}
- (void)didReceiveMemoryWarning {}

#pragma mark - Custom Accessors

- (void)setCustomProperty:(id)value {}
- (id)customProperty {}

#pragma mark - IBActions

- (IBAction)submitData:(id)sender {}

#pragma mark - Public

- (void)publicMethod {}

#pragma mark - Private

- (void)privateMethod {}

#pragma mark - Protocol conformance
#pragma mark - UITextFieldDelegate
#pragma mark - UITableViewDataSource
#pragma mark - UITableViewDelegate

#pragma mark - NSCopying

- (id)copyWithZone:(NSZone *)zone {}

#pragma mark - NSObject

- (NSString *)description {}

3.2 重载系统方法时,不要忘记先调用super的方法;比如init、viewdidload等。
3.3 属性必须指定其类型:比如(nonatomic,strong)。
3.4 使用#import引入oc/oc++头文件,使用#include引入c/c++头文件。
3.5 尽量精简你的公开api接口。无需公开的方法应为私有。
3.6 init和dealloc方法中避免使用self.来访问成员变量。
3.7 dealloc方法中对变量的释放应和初始化时的顺序相反。
3.8 对nsstring使用copy。
3.9 不要手动抛出objective-c的异常(但你可以尝试捕获异常以增加应用的健壮性)。
3.10 不同类型的强制转换需要注意是否造成数据丢失、溢出等问题。
3.11 推荐使用@property来自动合成属性,如非必要无需再写@synthesize相关代码。

4.注释要求

注释一般用来解释代码的意图。要保持注释和代码同步更新,表达准确,避免误导。尽可能写自注释的代码。尽量使用单行注释而不是块注释;需要文档化的代码可以使用vvdocumenter-xcode插件来帮助生成。

5.其他

5.1 delegate对象不应该被retain,这样做会造成retain环。
5.2 使用__weak来消除block中的retain环,例如:

__weak __typeof(self)weakSelf = self;
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
            __strong __typeof(weakSelf)strongSelf = weakSelf;
            // use strongSelf here to invoke methods.
            [strongSelf testSelfMethod];
            };

5.3 苹果官方主要推荐的是MVC的架构,其他各种流行架构也是在MVC基础上的变种。写代码时需要注意model/view/controller之间的分离,保持清晰的层次关系。

6.参考文档

苹果cocoa编码指南
google objc编码指南
objc编码指南:by raywenderlich.com

7.附:ARC下编码注意事项

7.1.代码中不能使用retain, release, retain, autorelease
7.2.不重载dealloc(如果是释放对象内存以外的处理,是可以重载该函数的,但是不能调用[super dealloc])
7.3.不能使用NSAllocateObject, NSDeallocateObject
7.4.不能在C结构体中使用对象指针
7.5.id与void *间的如果cast时需要用特定的方法(__bridge关键字)
7.6.不能使用NSAutoReleasePool、而需要@autoreleasepool块
7.7.不能使用“new”开始的属性名称 (如果使用会有下面的编译错误”Property’s synthesized getter follows Cocoa naming convention for returning ‘owned’ objects”)

时间: 2024-09-16 11:47:04

iOS编码规范精简版-根据apple、google等规范总结而来的相关文章

提高在google中排名的重点(精简版)

中介交易 SEO诊断 淘宝客 云主机 技术大厅 网站优化和提高在google中排名的重点 (精简版)    Google的排名运算法则主要使用了两个部分,第一个部分是它的文字内容匹配系统.Google使用该系统来发现与搜索者键入的搜索词相关的网页:第二部分也是排名运算法则中最最重要的部分,就是Google的专利网页级别技术.  (title)中出现的关键字给予较高的权值,所以你应当确保在你网站的标题标签中包含了最重要的关键词,即应围绕你最重要的关键词来决定网页标题的内容.不过网页的标题不可过长,

JS(Unicode->GB)的精简版(仍含拼音和UrlEncode)

encode|js|拼音 http://www.csdn.net/Develop/read_article.asp?id=15043用的Unicode和GB的转换库如下地址http://www.blueidea.com/user/qswh/qswhU2GB.js148k的js,本地测试没有问题,但搁到网上就会觉得有点慢了 所以需要一个精简版,采录的只是GB2312编码,即部分GBK,但够用即可这次特别精简了代码,但功能不变,区别只是该版只能作用于常见汉字.什么马配什么鞍,也修改了UrlEncod

谷歌发精简版地图引擎

  Google今天宣布推出面向普通用户的地图引擎精简版(Maps Engine Lite),任何地图爱好者都可以利用它创建和分享自定义地图.此前,Google的地图引擎(Maps Engine)只针对企业用户开放. 图示:Google面向普通用户发布地图引擎精简版,可定制地图 目前Google推出的这一精简版地图引擎还是测试版.Google表示,通过这个精简版的地图引擎Maps Engine Lite,任何地图爱好者通过这一强大.好用的工具来做出定制Google地图.用户可以上传定位的小型电子

MathType正式版与精简版有什么区别

MathType正式版与精简版有什么区别   MathType 6.9启动界面示例 MathType正式版的功能与特点: 1.Office办公软件兼容使用,MathType 6.9版本在Windows 系统中完全兼容Office 2013和Office 365.Office 2010.2007.2003和XP等. 2.MathType在Word 2013.2010.2007.Word 2003和XP 2002中的菜单和工具栏. 插入公式:不管是否有公式编号,Word功能区的MathType选项卡

基于XML-DOM技术的MIS系统(学生管理系统-精简版)

dom|xml (亿众国际-004)[原创]基于XML-DOM技术的MIS系统(学生管理系统-精简版) ///////////////////////////////////////////////////////////Author: stardicky                                    ////E-mail: stardicky@hotmail.com                        ////QQNumber: 9531511        

Office 2010试用(一) 从精简版无法升级

今天看到小松发的Office2010活动 凑热闹也下回来看了看. 试用版文件大小793M,以1M的带宽来说,下载用时2小时15分左右.还算可以接受. 提供一个MAK: 83CM4-GC4TF-HPVX6-BWKJT-K8KDQ 省的你花时间去找. 然而很快凄惨的事情就发生了,由于之前装过精简版的Office 2003的3合一版本,(短小精干,3个软件才50M,这之前还运行的非常好.)导致报错,换了一台电脑,依然报错,而且错误还不一样. 查看本栏目更多精彩内容:http://www.biancen

office2007精简版有什么特色功能?

  最近,小编准备重新安装office2007这款办公软件,结果在网上找到的是一款叫做office2007精简版的办公软件,那么,这款office2007精简版与office2007相比,有什么特色功能呢?如果您也跟小编一样感到迷惑的话,就一起看看今天的office2007精简版特色功能介绍吧! Microsoft Office 2007精简版软件特色: Microsoft Office 2007精简版只适合没有安装Microsoft Office的用户,只要简单的运行安装 Microsoft

迅雷精简版好用吗?

  迅雷精简版装载全新轻量下载引擎,轻巧却不牺牲下载速度,通过与浏览器结合的模式,带给用户更好的下载体验.重点优化的产品性能和全新设计的浅色调皮肤,让用户真正从繁重的下载中解脱出来,享受极速下载的同时,不以牺牲系统性能为代价,真正实现下载速度.系统性能.流畅上网的合理平衡. 迅雷精简版和迅雷7有什么不同: 迅雷精简版通常进行过修改优化,它没有象看看等一类的东西,去了广告和一些不必要组件,只为下载而做,如果你只是想要使用迅雷的下载,不考虑别的,那下载速度是一样,没什么区别.

迅雷精简版下载速度慢怎么办?

  迅雷精简版下载速度慢怎么办: 首先需要判断迅雷精简版是个别资源下载慢还是全部资源下载慢,进而判断造成的原因是什么. 1.请登录http://dl.xunlei.com/xl7.html这个页面,下载一个迅雷7的安装包测试查看一下是否同样的情况进行判断是个别资源的问题还是全部资源的问题. 2.个别资源下载慢则是因为当前资源属于冷门资源导致的,迅雷本身是提供下载服务,但是如果下载的资源很少,那么就会造成下载速度很慢,无法达到带宽上限速度的问题,只能建议您开通会员或者是更换其他下载源比较多的下载连