iOS开发之代理设计模式

一、代理设计模式的作用:

-当A对象要监听B对象的一些行为时,A成为B的代理;

-当B对象要通知A对象一些事情时,A成为B的代理。

比如UIScrollView和UITableView,当控制器要监听scrollview的滚动时,就要成为scrollView的代理。


二、代理设计模式的开发步骤:

1、定义一个协议。协议名称格式一般是(自定义控件名 + Delegate),然后在协议里声明一些代理方法,一般设置为可选的(@optional)。

2、在自定义控件的头文件中,声明一个代理属性:

@property (nonatomic, weak) id<代理协议名> delegate;

3、在控件内部发生某些行为时,调用代理对应的代理方法,通知代理内部发生的事情。

4、设置代理:

自定义控件.delegate = b对象;

5、b对象遵守协议,实现代理方法。


三、代理和通知的区别:

-代理:一个对象只能告诉另一个对象发生了什么事情(一对一)

-通知:一个对象可以告诉很多对象发生了什么事(一对多)


四、KVC和KVO:

- KVC(Key Value Coding)常见作用:给模型属性赋值

- KVO(Key Value Observing)常用作用:监听模型属性值的改变

- KVO的使用步骤:

// a监听了b的name属性的改变

[b addObserver:a forKeyPath:@"name" options: NSKeyValueObservingOptionOld context:nil];

// a必须要实现监听方法

/** 当监听到object的keyPath属性发生了改变 */
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context {
    NSLog(@"监听到%@对象的%@属性发生了改变, %@", object, keyPath, change);
}

/** 移除监听 */
- (void)dealloc {
    [b removeObserver:a forKeyPath:@"name"];
}


你可能感兴趣的:(iOS开发之代理设计模式)