iOS协议、代理、Block和回调、类别

【协议】(Protocol)

//协议是用来规范接口,实现对象间交互的一种机制。类似于JAVA中的接口,可以模拟。

协议的权限

@optional//可选的

@required//必须的

【代理】

一.代理的概念

【注】代理是实现两个类的对象间通信的一种机制。

【委托方】主动方 持有带协议的id指针,可以使用协议。

【代理方】被动方 遵从协议,实现方法。

代理回调(反向传值)

//当我们需要完成某个功能模块,但不知道使用功能模块的是哪个对象,通过协议,可以规定接收数据的对象通过哪个方法获得数据。调用该方法的过程称为【回调】

【Block】

【注】Block是管理程序中代码块的对象

//Block和函数指针很相似,可以记成将函数指针的*改成^

        int (^block)(int, int);

【注】block是一个指向Block对象的指针

//block是一个Block对象指针

        block = ^(int a, int b){

            NSLog(@"这个代码块被使用了");

            return a + b;

        };

        //这不是个函数,是一个代码块对象

        NSLog(@"%d", block(4, 8));

【注】__block关键字,声明一个变量,使变量在Block的内外都能使用。

【类别】

【问题】有的时候我们使用一个类(官方,第三方,自己创建的)会感叹,如果这个类再有一个什么什么样的方法就更好用了,更适合当前程序。但是我们却不方便修改原类。

【答】可以使用类别为类增补方法

一.认识类别(Category)

【注】类别是类的升级补丁,可以为类添加成员方法。另外类别也可以对类的方法分类管理。

【注】

1.类别中不能添加成员变量

2.在类别中添加的消息,就如同添加到原类当中;对象的方法可以使用原类对象的成员变量。

3.使用类别须导入类别头文件。

4.父类类别中的方法,子类也可以用。

【注】

1.如果类别中的方法很少,类别只用于当前文件,可以直接将类别声明到当前文件中。

2.如果类别的实现和类别中方法的调用在同一文件中,可以省略类别的接口部分

二.匿名类别

【注】类别的【仕途不顺】的远亲。

【见CategoryDemo2】

三.前置声明

【注】编写程序时,不要在一个类的头文件中包含另一个类的头文件,以免彼此包含头文件发生【交叉包含】。

【注】A类使用B类,应在实现部分包含B类头文件。

【注】如果A类接口部分使用到B类名称,应做B类的前置声明

@class B;

@class 类名

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。