iOS--总是记不住的分类和扩展

2019-02-13  本文已影响0人  我是一个大胖墩

分类(category)

作用:可以在不修改原来的类的基础上,为其扩展方法,常用于为系统自带的类扩展方法。

举例:

想要收集每个页面的启动时间。

问题一:

项目中有很多页面了,一个一个的添加方法,即浪费了时间,当新增页面的时候又要添加方法,麻烦。

解决方法:

页面都继承于UIViewController,既然想要在每个页面都执行的代码,就可以写在父类中。

问题二:

UIViewController是官方类,只能调用,而不能修改实现。

解决方法:

使用分类(category)。

分类中能写什么?

分类中只能添加“方法”,而不能增加成员变量,(在runtime层面可以通过关联对象为分类添加成员属性)如果一定要在分类中添加成员变量,可以通过getter,setter进行添加

分类中可以访问原来类中的成员变量,但是只能访问@protect和@public形式的变量,如果想要访问本类中的私有变量,只能通过方法去访问。

在本类和分类有相同的方法时,优先调用分类的方法再调用本类的方法。

分类(category)和类扩展(extension)的关系

1.类扩展(extension)是category的一个特例,有时候也被称为匿名分类,作用是为一个类添加私有的成员变量和方法。

2.类扩展能写点啥?和分类不同,类扩展即可以声明成员变量又可以声明方法。

3.类扩展听上去很复杂,但其实我们很早就认识他了。你记得继承自UIViewController的ViewController和继承自NSObject的类有什么不同么?

@interface ViewController()//这就是类扩展的写法

@end

4.类扩展可以定义在.m文件中,这种扩展方式中定义的变量都是私有的,也可以定义在.h文件中,这样定义的代码就是共有的,类扩展在.m文件中声明私有方法是非常好的方式。

7.类扩展中添加的新方法,一定要实现。category中则没有这种限制。

category

专门用来给类添加新的方法,除非通过runtime,否则不能给类添加成员属性,因为如果可以添加成员变量,添加的成员变量没有办法初始化。

extension

可以给类添加成员属性,但是是私有变量;可以添加方法,但也是私有方法。

引用资料: 深入浅出理解分类(category,类别,类目)和类扩展(extension,匿名类别)

上一篇 下一篇

猜你喜欢

热点阅读