OC-分类、block

分类的概念


Category:类别、类目、分类、非正式协议


分类的作用


将一个类中的不同方法分到多个不同的文件中存储,便于对类进行模块化设计和团队开发。

可以在不修改原来类的基础上,为这个类扩充一些方法。

注意:

分类中只能增加“方法”,不能增加成员变量

分类中可以访问原来类中的成员变量

最主要的作用:给系统自带的类扩展方法


使用分类的目的


对现有类进行扩展

比如,可以扩展Cocoa      touch框架中的类,你在类别中增加的方法会被子类所继承,而且在运行时跟其他的方法没有区别

作为子类的替代手段

不需要定义和使用一个子类,你可以提过类别直接向已有的类里增加方法

对类中的方法归类

利用category把一个庞大的类划分为小块来分别进行开发,从而更好的对类中的方法进行更新和维护


分类的使用流程

声明分类-->实现分类-->使用分类

注意:分类的命名规则:类名+扩展方法,如“NSString+countNum”。

      分类的接口声明与类的定义十分相似,但分类不继承父类,只需要带有一个括号,表明该分类的主要用途。


注意:

当分类与主类都有同一个方法时,优先调用分类中的方法

当多个分类中都有同样一个方法时,优先调用最后一个参与编译的分类中的方法。


分类和类扩展的区别:

类别中只能增加方法;

是的,你没看错,类扩展不仅可以增加方法,还可以增加实例变量(或者合成属性),只是该实例变量默认是私有类型的(作用范围只能在自身类,而不是子类或其他地方);

类扩展中声明的方法没被实现,编译器会报警,但是类别中的方法没被实现编译器是不会有任何警告的。这是因为类扩展是在编译阶段被添加到类中,而类别是在运行时添加到类中。

类扩展不能像类别那样拥有独立的实现部分(@implementation部分),也就是说,类扩展所声明的方法必须依托对应类的实现部分来实现。

定义在

    .m 文件中的类扩展方法为私有的,定义在 .h 文件(头文件)中的类扩展方法为公有 的。类扩展是在 .m 文件中声明私有方法的非常好的方式。


Block的概念及基本使用


定义

block是iOS中一种比较特殊的数据类型

block是苹果官方特别推荐使用的数据类型,应用场景比较广泛

使用场合

动画

多线程

集合遍历

网络请求回调

作用

用来保存一段代码,可以在恰当的时间在取出来调用

函数与block

函数写法

Void myBlock()

{

NSLog(@"dsddf");

}

block写法

Void (^myBlock)() = ^(){

NSLog(@"dsdad");

}

你可能感兴趣的:(OC-分类、block)