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