代理
代理也称委托
,就是一件事情发生后,自己不处理,让别人去处理。其目的为了在程序直接解藕
,让程序关系不是很紧密。代理是一对一消息传递,是一种设计模式
代理适用于回调比较频繁的情况,代码看着整洁,条理清晰
缺点:代码可读性差,使用起来比较麻烦,需要声明协议、声明代理属性、遵守协议、实现协议方法等。
代理的规范写法:
类名+Delegate
方法的规范写法:类名+(第一个参数是类本身)+(其他参数)
通知
是一对多的通知模式,是iOS中一个调度消息通知的类,采用单例模式设计,在程序中实现传值、回调等地方应用很广。NSNotification & NSNotificationCenter是使用观察者模式来实现跨层传递信息
1.观察者接收到通知后执行任务的代码再发送通知到线程中执行
-(void)addObserver:(id)observer selector:(SEL)aSelector name:(nullable NSNotificationName)aName object:(nullable id)anObject;
2.通知中心向观察者发送消息
-(void)postNotification:(NSNotification *)notification;
-(void)postNotificationName:(NSNotificationName)aName object:(nullable id)anObject;
-(void)postNotificationName:(NSNotificationName)aName object:(nullable id)anObject userInfo:(nullable NSDictionary *)aUserInfo;
3.移除观察者
-(void)removeObserver:(id)observer;
-(void)removeObserver:(id)observer name:(nullable NSNotificationName)aName object:(nullable id)anObject;
Block
block是一对一的传值的协议
,写法更加简练,方便使用
。主要是用在响应事件和传值上,经常用的AFN就会用block进行回调传值.
block本质是一个对象
,也是一个匿名函数(用函数式编程进行了保存,底层是有名的). 在底层的__main__block__impl__0 上有指出block是isa指针对象
block的使用方法和格式
引用:__weak typeof(self) weakSelf = self;
[yourBlock:^(NSArray *repeatedArray, NSArray *incompleteArray) {
[weakSelf doSomething];
}];