开发网站做什么,法制网站建设问卷调查,商品网站开发,如何建设一个国外网站Objective-C委托和协议本没有任何关系#xff0c;协议如前所述#xff0c;就是起到C中纯虚类的作用#xff0c;对于“委托”则和协议没有关系#xff0c;只是我们经常利用协议还实现委托的机制#xff0c;其实不用协议也完全可以实现委托。 AD#xff1a;【活动】Web和AP… Objective-C委托和协议本没有任何关系协议如前所述就是起到C中纯虚类的作用对于“委托”则和协议没有关系只是我们经常利用协议还实现委托的机制其实不用协议也完全可以实现委托。 AD【活动】Web和APP兼容性实战 Win10训练营免费报名 Objective-C中委托和协议是本文要介绍的内容委托和协议是两个概念协议实际上相当于C中的纯虚类的概念只定义并只能由其它类来实现。而委托类似于Java中的接口。Objective-C实现委托这种机制是利用协议来实现的这种说法我现在认为是不对的理由下述。 Objective-C委托和协议本没有任何关系协议如前所述就是起到C中纯虚类的作用对于“委托”则和协议没有关系只是我们经常利用协议还实现委托的机制其实不用协议也完全可以实现委托。下面说明了实现方式 定义一个类A interface A:NSObject -(void)print; end implement A -(void)print{ } end 定义一个类B在B中定义类A的实例为B中的成员变量: interface B:NSObject{ A *a_delegate; } end 下面在mai()函数中实现委托机制 void main() { B *b[[B alloc]init]; A *a[[A alloc]init]; b.a_delegatea; [b.a_delegate print]; } 这样最基本的委托机制就完成了套用最通俗的一句解释B需要完成一个print的操作但他自己并没有实现这个操作而是交给了A去完成自己只是在需要时调用A中实现的print操作。 下面再写一种实现方式这样方式更接近于我们通常见到的用协议还实现的方式 我们还是定义一个类A interface A:NSObject B *b; } -(void)print; end implement A synasize delegate; -(void)viewDidLoad{ b[[B alloc]init]; b.delegateself; } -(void)print{ NSLog(print was called); } end 然后类B的定义改成如下所示 interface B:NSObject{ id delegate } propert(nonamtic,retain) id delegate; end 现在我们不用main()函数在B的实现部分来实现委托机制 implement B -(void)callPrint{ [self.delegate print]; } end 上面这种实现方式和第一种其实是一样的只是第一种是在第三方函数调用委托方法。delegate是id类型本例中就是A类的一个实例当然可以 调用A类中的print。第二种方式不存在第三方函数是在B类中调用 A类中的方法。或者说B中需要print方法自己不实现让A来实现自己调用 。 再接下来就是最常见的用协议实现委托的方式说明如下 protocol-协议就是使用了这个协议后就要按照这个协议来办事协议要求实现的方法就一定要实现。 delegate-委托顾名思义就是委托别人办事就是当一件事情发生后自己不处理让别人来处理。 当一个A view 里面包含了B view b view需要修改a view界面那么这个时候就需要用到委托了。 需要几个步骤 1、首先定一个协议 2、a view实现协议中的方法 3、b view设置一个委托变量 4、把b view的委托变量设置成a view意思就是 b view委托a view办事情。 5、事件发生后用委托变量调用a view中的协议方法 例子 B_View.h: protocol UIBViewDelegate NSObject optional - (void)ontouch:(UIScrollView *)scrollView; //声明协议方法 end interface BView : UIScrollViewUIScrollViewDelegate { id UIBViewDelegate _touchdelegate; //设置委托变量 } property(nonatomic,assign) id UIBViewDelegate _touchdelegate; end B_View.mm: synthesize _touchdelegate; - (id)initWithFrame:(CGRect)frame { if (self [super initWithFrame:frame]) { // Initialization code _touchdelegatenil; } return self; } - (void) touchesBegan:(NSSet*)touches withEvent:(UIEvent*)event { [super touchesBegan:touches withEvent:event]; if(_touchdelegate!nil [_touchdelegate respondsToSelector: selector(ontouch:) ] true) [_touchdelegate ontouch:self]; //调用协议委托 } end A_View.h: interface AViewController : UIViewController UIBViewDelegate { BView *m_BView; } end A_View.mm: - (void)viewWillAppear:(BOOL)animated { m_BView._touchdelegate self; //设置委托 [self.view addSubview: m_BView]; } - (void)ontouch:(UIScrollView *)scrollView { //实现协议 } 小结详解Objective-C中委托和协议的内容介绍完了希望通过本本文的学习能对你有所帮助 转载于:https://www.cnblogs.com/Free-Thinker/p/4988948.html