[关闭]
@chenhongen 2019-01-09T11:18:13.000000Z 字数 2473 阅读 1076

MH_iOS开发编码规范

iOS 代码规范


一、编码规范

1.代码中除了注释,其他部分不允许出现中文,任何文件、类、变量命名应见名知意

2.声明类或方法时,注意空格的使用,参数过多时可换行保持对齐
参数过多时换行保持对齐

调用方法时也是如此,参数都写在一行或换行冒号对齐,
冒号对齐

3.命名规则

类名首字母大写,方法首字母小写,方法中的参数首字母小写,同时尽量让方法的命名读起来像一句话,能够传达出方法的意思,同时取值方法前不要加前缀“get”
类名命名规范

变量名小写字母开头
变量名命名规范
常量以小写字母k开头,后续首字母大写
常量命名规范

4.关于注释

注释很重要,但除了开头的版权声明,尽可能把代码写的如同文档一样,让别人直接看代码就知道意思,写代码时别担心名字太长,相信Xcode的提示功能。

5.实例变量应该在实现文件.m中声明或以@property形式在.h文件中声明,一定要直接在.h文件声明,加上@priavte,另外,使用@private、@public,前面需要一个缩进空格。

6.尽可能保证 .h文件的简洁性,可以不公开的API就不要公开了,写在实现文件中即可。

7.Xcode支持Objective-C/C/C++混编,所以引用头文件时:#import Ojbective-C/Objective-C++头文件(Objective-C++是Objective-C与C++混编的文件),#include C/C++头文件。

8.写delegate的时候类型应该为weak弱引用,以避免循环引用,当delegate对象不存在后,我们写的delegate也就没有存在意义了自然是需要销毁的,weak与strong可以参考上一篇文章介绍。
代理弱引用防止循环引用

9.实例变量声明时变量名前面加下划线“_”,局部变量不用加。
实例变量和局部变量编码规范1

实例变量和局部变量编码规范2

10.使用Block时,内容四个空格缩进,“^”后带有参数时,参数与“{”之间有一个空格缩进
使用block时注意代码的美观

11.建议使用“#pragma mark”,方便阅读代码
使用#pragma mark分组注释

二、空行和空格

A:.h中的空行

1.文件说明与头文件包涵(#import)之间空1行

2.头文件包涵(#import)之间,如果需要分类区别,各类别之间空1行

3.头文件包涵(#import)与@class之间空2行

4.@interface与@class之间空一行

5.头文件{}里面,空1行开始声明对象成员,如果需要分类区别,各类别之间空1行

6.{}外空1行,书写属性,如果需要分类区别,各类别之间空1行

7.空1行开始写方法,如果需要分类区别,各类别之间空1行

8.方法完成后,空1行@end

9.如果需要声明protocal,空2行接着写。通常protocal写在@end后面,但是声明在@interface前面,也可以另写一个文件

B:.m中的空行

1.文件说明与头文件包涵(#import)之间空1行

2.头文件包涵(#import)之间,如果需要分类区别,各类别之间空1行

3.@implementation和@synthesize之间空一行,@synthesize不要使用逗号(,)如果需要分类区别,各类别之间空1行

4.@synthesize与方法之间空2行

5.各方法之间空2行

C:方法里面的空行

1.方法名后空1行开始写

2.变量声明后需要空1行,如果需要分类区别,各类别之间空1行

3.条件,循环,选择语句,整个语句结束,需要空1行

4.各功能块之间空1行

5.最后一个反括号之前不空行

6.注释与代码之间不空行

7.#pragma mark与方法之间空1行

关于空格

  1. .h中协议<>前面有1个空格

  2. .h中成员声明时,类型与变量之间有至少1各空格。星号(*)靠近变量,不靠近类型。(部分习惯,所有变量可以以*对齐,中间留空)

3.@property后有1各空格,()里面,逗号后有1个空格,括号外,先留1个空格,再声明属性

4.方法+,-后,与()之间有1个空格

5.返回类型与*之间有1个空格,方法参数中返回类型与*之间有1个空格

6.多参数的方法,每一个参数后面都有1个空格

三、性能优化

1.用ARC管理内存:可以避免我们经常忘记释放内存造成的内存泄露

2.正确的使用reuseIdentifier,不要忘了给UITableViewCells, UICollectionViewCells,甚至是UITableViewHeaderFooterViews设置正确的reuseIdentifier设置重用标识。

3.不要阻塞主线程:要将耗时操作尽量放在子线程,主线程最主要做的工作是更新UI界面,处理用户响应事件,提升用户感受

4.避免在imageView中调整图片的大小:imageView中显示一个来自bundle的图片,应该保证图片的大小和UIImageView的大小相同,在运行中缩放图片是很耗费资源的,如果图片是从远端服务加载的你不能控制图片大小,比如在下载前调整到合适大小的话,你可以在下载完成后,最好是用background thread,缩放一次,然后在UIImageView中使用缩放后的图片

5.重用和懒加载,即当用到的时候再加载,不必要在viewdidload方法中一次性加载所有的数据或者视图

6.处理内存警告:苹果提供了接口给我们处理内存警告,可以在控制器或者UIApplication里面处理

7.选择正确的数据格式:JSON尽量让后台服务器返回JSON数据,而不是XML数据的格式

8.尽量少直接操作layer的一些属性,例如是layer的圆角,layer的阴影,尽量采用绘制贝瑟尔路径的方式。例如设置圆形头像

9.优化tableView:1.正确使用reuseIdentifier来重用cells 2.缓存行高 3.异步请求数据,缓存请求结果

10.使用Autorelease Pool,NSAutoreleasePool`负责释放block中的autoreleased objects。一般情况下它会自动被UIKit调用。但是有些状况下你也需要手动去创建它

11.选择是否缓存图片:
常见的从bundle中加载图片的方式有两种,一个是用imageNamed,二是用imageWithContentsOfFile,第一种比较常见一点。

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注