7-17 代码规范、分类和类扩展

本文探讨了iOS开发中的代码规范,重点介绍了if语句的编写技巧,如尤达表达式、布尔表达式和卫语句,旨在提高代码可读性和调试性。同时,讲解了分类和类扩展的创建、使用场景、优缺点,以及它们在扩展类功能、组织代码结构中的作用。分类可以增加方法,但不能添加成员变量,而类扩展则用于声明私有成员和方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

有关if语句的代码规范

1.前置常量(尤达表达式)

​ 例如:nil == obj 而不是obj == nil,避免手误将==写成=,该写法不会导致报错却会导致编译错误。

2.使用布尔表达式(nil == obj)而不是隐式的与零比较(obj/!obj,提高可读性。
3.复杂条件处理(1)提高可调式性:

​ (1).复杂子条件:在if语句中使用换行,运用断点进行调试

​ (2).不复杂子条件:将 子条件提取出来分配给bool变量。

4.复杂条件处理(2)提高运行效率:

​ 将复杂度较低的子条件前置运行。

5.卫语句:

​ 代码的提前退出,减少代码的嵌套层级。

分类和类扩展

分类
创建方法:

点击New File 创建一个Objective-C File,选择File Type为Category并指定类。

使用场景:
  • 为类添加方法,扩展它的功能

  • 分解类文件,将类功能按照功能拆解成不同模块,

  • 创建对私有方法的向前引用,即在分类中声明这些私有方法,即可正常调用。

  • 非正式协议(不懂):正式协议是通过 protocol 指定的一系列方法的声明,然后由遵守该协议的类自己去实现这些方法。而非正式协议是通过给 NSObject 或其子类添加一个分类来实现。非正式协议已经渐渐被正式协议取代,正式协议最大的优点就是可以使用泛型约束,而非正式协议不可以。)

优点:
  • 为类添加方法,扩展类的功能,可用于系统类。
  • 按需加载不同分类。
缺点:
  • 不能直接添加成员变量,但可以用光联对象来实现这种效果
  • 分类方法会覆盖原本类的同名方法,使用不当造成问题
注意:

从Category的底层结构来看,分类可以添加实例方法、类方法、协议和属性,但是不能添加成员变量,因为没有存储成员变量对应的指针变量。

分类中使用@property声明属性不会生成setter/getter方法以及_成员变量

在分类中只能访问@protected和@public形式的成员变量。

类扩展
作用:
  • 声明私有成员变量
  • 声明私有属性
  • 声明私有方法

分类和类扩展的区别:

分类(Category)类扩展(Extension)
决议时间运行时决议编译时决议
是否可以声明和实现可以声明和实现只以声明的形式存在,多数情况下寄生在宿主类的.m文件中,或者创建扩展类。
作用于系统类可以为系统类添加分类不能为系统添加扩展

属性关键字

分类属性关键字
原子性atomic、nonatomic
读写权限readwrite、readonly
方法名setter、getter
内存管理assign、weak、unsafe_unretained、retain、strong、copy
可空性(nullable、_Nullable 、__nullable)、 (nonnull、_Nonnull、__nonnull)、 (null_unspecified、_Null_unspecified 、__null_unspecified)、 null_resettable
类属性class
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值