OC编码规范

一、命名规范


1.:

(1)首字母大写,后续单词首字母大写。

(2)类名末尾要包含此类的类型,比如RootViewRootViewController


2.属性

(1)属性名称首字母小写,后续首字母大写;

(2)使用@property,要保持必要的空格,如:@property (nonatomic, strong)

(3)如果在@implementation内声明全局变量,则使用下划线前缀,局部变量不需要使用下划线前缀;

(4)禁止使用abc这样的变量命名,要见词达意;

(5)属性命名时,要将属性类型编写到属性名中,使读者看到变量名即可知道这是个什么类型的变量,比如:usersDictusersArray等。


3.方法:

(1)-或者+后加一空格;

(2)方法名首字母小写,后续单词首字母大写;

(3)参数名首字母小写,后续单词首字母大写;

(4)参数类型如果带有*号,则参数类型和*号之间加一空格;

(5)如果方法太长、参数过多,可以换行冒号对齐,方法调用也一样;

(6)非重写系统方法时,不要使用issetget前缀;

(7)可以使用 can,should,will等词来协助表达存取方法的意思,但不要使用dodoes

(8)不可以省略关键词;

(9)尽量让方法的命名读起来像一句完整的话,能够传达出方法的意思;


4.宏定义:

宏定义以k开头,第二个字母大写,后续单词首字母大写。


5.公共:

(1)单词尽量通俗易懂,避免引起歧义,具体表述要和实际功能保持一致;

(2)除了广为人知含义的缩写,比如infomsgUIHTTP这类以外,尽量不要使用单词缩写,要写全拼,不要担心方法太长,清晰最重要。


二、每一行的最大长度


Xcode > Preferences > Text Editing > Page guide at column:中将最大行长设置为100,过长的一行代码将会导致可读性问题。


三、缩进和大括号


1.统一使用四个空格作为缩进。如果以Tab来进行缩进控制,请在Xcode中设置Tab缩进为4个空格。

2.所有大括号另起一行。

3.if判断或者for循环中,就算仅有一行逻辑代码,也不能省略大括号的使用。


四、注释


1.注释很重要,过多过少都不合适,不能没有,也不能喧宾夺主。

2.变量、方法名前要加注释加空行,不要使用后置注释的方式。

3.方法内部,按照逻辑步骤分块,每块添加注释;

4.除了方法内部第一条注释以外,注释上部保留一空行,避免代码和注释混为一片。

5.头文件使用标准的多行注释格式,实现文件中仅使用双斜杠注释即可。

6.注意注释是为了让别人看懂,而不是仅仅你自己。


五、使用统一前缀


1.一个项目内根据实际意义定义前缀;

2.项目内所有源文件、资源文件(包含图片)统一使用前缀,避免项目间冲突;

3.源文件内部的宏定义同样需要使用统一前缀,如下;k +前缀 + 实际意义;


六、类头文件编写规范


1.宗旨:头文件是写给使用者看的,在满足使用者需求的前提下,头文件元素越少越好,将没有必要让使用者看到的元素放到实现文件中,这样处理,能够减少使用者的学习成本,而且减少使用错误率。

2.头文件内容添加顺序:

(1)版权注释
(2)头文件导入
(3)宏定义
(4)枚举定义
(5)协议定义
(6)类定义开始
(7)类所属变量定义
(8)类所属方法定义
(9)类定义结束

3.各个内容区之间都以一空行分割。避免代码一大片混在一起。

4.如果方法太多,可以使用#pragma mark对代码分区分块,方便阅读代码。


七、类实现文件编写规范


1.实现文件内容添加顺序

(1)版权注释
(2)头文件导入
(3)宏定义
(4)静态变量定义
(5)枚举定义
(6)类扩展定义开始
(7)类扩展的变量
(8)类扩展的方法
(9)类扩展结束
(10)类实现开始
(11)类实现方法
(12)类实现结束

2.各个内容区之间都以一空行分割。避免代码一大片混在一起。

3.类全局变量声明方式:以@property方式添加到类扩展定义中,不在@implementation中定义全局变量的方式。这样处理可以统一使用self点操作,对于全局变量的辨认度有大幅提高,

4.对于方法的封装,有几点规范:

(1)方法的单一职责:单个方法的职责尽量单一,尽量抽离公共逻辑,方法尽量复用。

(2)方法实现行数:一个方法的最大行数100行,如果一个方法的实现超过一百行,则说明需要进行逻辑拆分了。

(3)方法和方法之间要有一空行分割。

5.要使用#pragma mark将各个方法按照逻辑功能分区,公共方法单独分区。方便阅读和掌握代码结构。


八、#pragma mark格式


使用"#pragma mark - 内容"方式,此行上下都要留空行。


九、Block编写规范


1.除非必要,不要使用weakSelf。百分之九十九的情况不需要使用weakSelf,我们要自己维护好block的引用关系,让block适时释放。

2.跟之前大括号的规范一样,block中的大括号也要另起一行,^保留在原行末尾。

3.如果 block过于庞大,应该单独声明成一个变量来使用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/499883.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数据库---mysql的索引和引擎

mysql 的索引和引擎 mysql的数据都是存放在磁盘上的,都说索引会使查询变快,那么肯定是索引用了特殊的数据结构。 常见的数据结构有: hash hash就是咱们在hashMap中的那个hash,用hash确实快,而且时间复杂度是O&#x…

SQLite内置表SQLITE_MASTER

一、概述1.SQLite数据库中有一个内置表,名为SQLITE_MASTER,此表中存储着当前数据库中所有表的相关信息,比如表的名称、用于创建此表的sql语句、索引、索引所属的表、创建索引的sql语句等。2.SQLITE_MASTER表示只读的,只能对他进行…

redis单线程为什么还快的个人解释

面试的时候, 面试官问,redis是单线程还是多线程 答:单线程 面试官再问,单线程,为什么还快呢?不应该是多线程才更快吗?那这是不是有什么矛盾啊? 答:啊?&#x…

CDN的实现原理

一、传统模式 在描述CDN的实现原理前,让我们先看传统的未加缓存服务的访问过程,以便了解CDN缓存访问方式与未加缓存访问方式的差别: 用户提交域名→浏览器对域名进行解释→得到目的主机的IP地址→根据IP地址访问发出请求→得到请求数据并回复…

数据库---事务的隔离级别

首先,我们下面说的数据库事务,都是使用INNODB引擎的结果。 MYISAM是没有事务的,也就没有下面这些说法。 1.数据库事务的四大特性: 原子性:事务包含的所有数据库操作要么全部成功,要不全部失败回滚一致性&…

iOS崩溃日志收集

一、概述iOS-App崩溃分为两种,一种是异常:NSException,一种是信号:Signal。二、异常崩溃1.NSException对象(1)reason:崩溃原因。(2)callStackSymbols:调用堆栈。(3)name:崩溃名称(4)userInfo&am…

统计iOS项目代码行数

打开终端,输入如下命令:find . -name "*.m" -or -name "*.h" -or -name "*.xib" -or -name "*.c" | xargs wc -l 此命令会迭代子目录,会统计每个源代码文件行数及总数,统计的行数包含空…

一个简单的权限系统模型

我们知道,一般说的简单的权限系统,都是使用shiro或者spring-security shiro之前用的比较多,原理也容易理解,算是比较成熟的权限方面的框架spring-security相对源码比较难懂,但由于与spring的完美融合,也有…

获取iOS任意线程调用堆栈(一)获取任意线程的调用栈地址列表

转载自:http://blog.csdn.net/jasonblog/article/details/49909163 如果要获取当前线程的调用栈,可以直接使用现有API:[NSThread callStackSymbols]。 但是并没有相关API支持获取任意线程的调用栈,所以只能自己编码实现。 1. 基础…

linux---基础01

Linux是一种自由和开放源码的操作系统,存在着许多不同的Linux版本,但它们都使用了Linux内核。Linux可安装在各种计算机硬件设备中,比如手机、平板电脑、路由器、台式计算机 Linux的目录结构 bin (binaries)存放二进制可执行文件 boot 存放用…

获取iOS任意线程调用堆栈(二)符号化理论:Mach-o文件结构

我们知道Windows下的文件都是PE文件,同样在OS X和iOS中可执行文件是Mach-o格式的。 所以我们如果要进行逆向分析,首先要熟悉Mach-o文件结构。 Mach-o包含三个基本区域: 头部(header structure)。 加载命令(…

linux---基础02

二、用户、组管理命令 Linux采用组来组织和管理用户 在Linux中每个用户有唯一的用户标识符UID,该UID是一个无符号整数。 同时每个用户也必须至少属于一个组,也有组标识符GID。 其中UID与GID独立编号。 1. groupadd命令 (1)grou…

获取iOS任意线程调用堆栈(三)符号化理论:从Mach-o结构分析类名方法名

下面来讲讲如何从Mach-o文件中分析出类名和方法名,也让我们了解下class-dump的原理。 Mach-o结构有两个节:__objc_classname 和 __objc_methname 其中就是类名和方法名。 其中__objc_classname的偏移为:ox7961 __objc_methname的偏移为0x6…

linux---基础03

三、 文件属性操作命令 1. chown命令 (1)chown示例一:改变文件的属主 [rootserver1 ~]# chown user1 hello.txt功能:将指定文件hello.txt的属主(所有者)改为user1。(2)chown示例…

获取iOS任意线程调用堆栈(四)符号化实战

转载自:http://blog.csdn.net/jasonblog/article/details/49909209 1. 相关API和数据结构 由于我们在上面回溯线程调用栈拿到的是一组地址,所以这里进行符号化的输入输出应该分别是地址和符号,接口设计类似如下: - (NSString *)s…

linux---基础04

六、网卡配置 分配临时IP地址: ifconfig eth0 up // 启用eth0网卡ifconfig eth0 192.168.1.104 netmask 255.255.255.0静态分配IP地址: vi /etc/sysconfig/network-scripts/ifcfg-eth0service network restart //重启 network服务(重新加载网卡配置)动态…

记录---基于BigDecimal的特殊的四舍五入

机试问题—实现基于BigDecimal的特殊的四舍五入。 这是一道外企的机试题,我把里面的某个难点部分,摘出来详细如下: //实现特殊的四舍五入,先普通四舍五入取到小数点后两位,然后最后一位向后进位,0和5不变&…

获取iOS任意线程调用堆栈(五)完整实现:BSBacktraceLogger

转载自:https://toutiao.io/posts/aveig6/preview BSBacktraceLogger 是一个轻量级的框架,可以获取任意线程的调用栈,开源在我的 GitHub,建议下载下来结合本文阅读。 我们知道 NSThread 有一个类方法 callstackSymbols 可以获取调…

Mac电脑如何彻底删除清除数据?CleanMyMac X软件更专业

虽然不用杀毒,但是日常的清理还是有必要的,特别是卸载一些软件会有残留,可以用命令mdfind来找,然后删,这里给新手用户推荐一款应用clean my mac x,定期清理一下,不用的时候关掉就可以。 CleanM…

git总是提示输入用户名密码的解决记录

git总是提示输入用户名密码的解决记录 git改过密码后,再用命令行pull代码(举个例子),就会每次让你输入用户名密码,很麻烦,比如: git pull origin dev:dev 输入用户名密码,ok了 git…