iphone开发中,委托、协议、数据源等总结

来源:互联网 发布:你幸福吗我姓曾 知乎 编辑:程序博客网 时间:2024/04/29 20:57

from:

http://blog.sina.com.cn/s/blog_4cd8dd130100t1et.html


其实没那么多繁琐的概念,基本只用代理,协议,数据源就可以了,<委托?什么狗屁概念,搞这么复杂违背了初衷>

简单解释下我的理解

class A
{
B<myProtocol>* pB;  // 说明类B应该支持<遵守>myProtocol这个协议
}
class B:NSObject<myProtocol>{}

那么,在A内做完<触发>一件事情的时候,通过pB调用myProtocol声明的一个方法,也就是说:A说,我需要B做一件事情,但是得通过myProtocol来说明

那么这个模型中  pB就是A的代理(代我处理),A的一个代理是pB<可能有多个其他的引用指针>,myProtocol就是协议


数据源:
简单理解就是数据得来源
比方一个表格,那么他得一个数据源就是 数组对象

一个视图,他得数据源可以是一个图片,或者一个字符串等等,就是用来显示得东西。
其实没必要理解得那么复杂,字面理解就差不多了。



objective-c protocol delegate
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 : UIScrollView<UIScrollViewDelegate>

{

 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

 _touchdelegate=nil;

 }

 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

{

    //实现协议

}


原创粉丝点击