分类的概念
Category:类别、类目、分类、非正式协议
分类的作用
将一个类中的不同方法分到多个不同的文件中存储,便于对类进行模块化设计和团队开发。
可以在不修改原来类的基础上,为这个类扩充一些方法。
注意:
分类中只能增加“方法”,不能增加成员变量
分类中可以访问原来类中的成员变量
最主要的作用:给系统自带的类扩展方法
使用分类的目的
对现有类进行扩展
比如,可以扩展Cocoa touch框架中的类,你在类别中增加的方法会被子类所继承,而且在运行时跟其他的方法没有区别
作为子类的替代手段
不需要定义和使用一个子类,你可以提过类别直接向已有的类里增加方法
对类中的方法归类
利用category把一个庞大的类划分为小块来分别进行开发,从而更好的对类中的方法进行更新和维护
分类的使用流程
声明分类-->实现分类-->使用分类
注意:分类的命名规则:类名+扩展方法,如“NSString+countNum”。
分类的接口声明与类的定义十分相似,但分类不继承父类,只需要带有一个括号,表明该分类的主要用途。
注意:
当分类与主类都有同一个方法时,优先调用分类中的方法
当多个分类中都有同样一个方法时,优先调用最后一个参与编译的分类中的方法。
分类和类扩展的区别:
类别中只能增加方法;
是的,你没看错,类扩展不仅可以增加方法,还可以增加实例变量(或者合成属性),只是该实例变量默认是私有类型的(作用范围只能在自身类,而不是子类或其他地方);
类扩展中声明的方法没被实现,编译器会报警,但是类别中的方法没被实现编译器是不会有任何警告的。这是因为类扩展是在编译阶段被添加到类中,而类别是在运行时添加到类中。
类扩展不能像类别那样拥有独立的实现部分(@implementation部分),也就是说,类扩展所声明的方法必须依托对应类的实现部分来实现。
定义在
.m 文件中的类扩展方法为私有的,定义在 .h 文件(头文件)中的类扩展方法为公有 的。类扩展是在 .m 文件中声明私有方法的非常好的方式。
Block的概念及基本使用
定义
block是iOS中一种比较特殊的数据类型
block是苹果官方特别推荐使用的数据类型,应用场景比较广泛
使用场合
动画
多线程
集合遍历
网络请求回调
作用
用来保存一段代码,可以在恰当的时间在取出来调用
函数与block
函数写法
Void myBlock()
{
NSLog(@"dsddf");
}
block写法
Void (^myBlock)() = ^(){
NSLog(@"dsdad");
}