ios -- 监听方法总结
来源:互联网 发布:手机淘宝的二手在哪里 编辑:程序博客网 时间:2024/05/16 15:03
发送通知
发送通知的目的是用来给外部一些信息,供外部的控制器来监听发送通知的对象内部的一些行为。
<span style="font-size:12px;">//某人发送了一个名为大新闻的通知,通知附带内容infoNSNotification *note = [NSNotification notificationWithName:@“大新闻” object:self userInfo:@{ @“time” : @“2015.6.1" @“desc” : @“也没什么大新闻" }];[[NSNotificationCenter defaultCenter] postNotification:note];</span>有人发送,就会有人接收,假设有另一个模拟机接收通知:
[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillShow:) name:UIKeyboardWillShowNotification object:nil];
- 监听某个行为,第一反应:用代理来监听行为
- 以下两个方法都能监听行为:
- 观察者模式(通知机制)
- 代理模式:如何设计一个代理模式?
代理模式
- 定义一个协议:
协议的格式:控件名 + Delegate,在协议里面声明一些代理方法(一般代理方法都是@optional)
按照苹果官方的命名样式来定义方法名:@protocol JWLoadMoreFooterDelegate <NSObject>@optional-(void)loadMoreFooterDidClickLoadMoreButton:(JWLoadMoreFooter *)footer;
- 声明代理属性
@property (nonatomic, weak) id<JWLoadMoreFooterDelegate> delegate;
想要用代理方法,就要遵循代理的协议
用weak是防止出现循环引用。
原理图如下:- 在内部发生某些行为时,调用代理对应的代理方法,通知代理内部发生什么事
- 设置代理,(先让控制器称为footer的代理)
footer.delegate = self;
- 遵守协议
<JWLoadMoreFooterDelegate>
- 调用代理中的方法
[self.delegate loadMoreFooterDidClickLoadMoreButton:self];
- 总结:设置了代理以后,可以监听代理方法
如果你想监听别人的一些行为,那么就要称为别人的代理;
如果你想告诉别人一些内部的事情,那么就让别人称为你的代理。
使用者:遵守协议—>设置代理—>使用代理中的方法来监听
- 告诉代理有没有实现这个方法
if([self.delegate respondsToSelector:@selector(…)]){
[self.delegate loadMoreFooterDidClickLoadMoreButton:self];
}
如果实现这个方法,那么就调用这个代理方法。如果没有实现就不调用。
代理和通知的区别
- 代理:1个对象只能告诉1个代理
- 通知:1个对象可以告诉多个代理,内部只要发了一个通知,外部只要有人接收都可以监听到。
另一种监听方式-KVO
- KVO(Key Value Observing)
常用作用:监听模型属性值的改变
下面是KVO的一个例子,细节的说明已经写在注释当中:
self.p1 = [[JWPerson alloc] init];self.p1.name = @“p1”;//self监听了self.p1的name属性的改变[self.p1 addObserver:self forKeyPath:@"name" options: NSKeyValueObservingOptionOld context:nil];self.p1.name = @"pppp1";#pragma mark - KVO监听方法//self得实现监听方法/***当监听到object的keyPath属性发生了改变*///这个方法继承于NSObject,所以不需要遵守其他协议,任何对象都可以调用这个方法//改变了object的哪个值(KeyPath),改成了什么(字典change)- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context{ NSLog(@"监听到%@对象的%@属性发生了改变, %@", object, keyPath, change);}
- 总结KVO:
- 对象自己添加观察者,监听对象的属性的改变
KVC:常见作用:给模型属性赋值
- 对象自己添加观察者,监听对象的属性的改变
- 注意点
- 无论是KVO还是通知,监听完后都要将观察者销毁
-(void)dealloc{ [[NSNotificationCenter defaultCenter] removeObserver:self];}
addTarget方法
- addTarget方法是最基本的监听方法,对象可以调用该方法,实现对其他对象的监听,同时也可以设置调用其他的方法。
- (void)addTarget:(id)target action:(SEL)action
- 总结:设置了代理以后,可以监听代理方法
- 定义一个协议:
0 0
- ios -- 监听方法总结
- IOS监听方法
- IOS动画和各种监听总结UIGestureRecognizer
- ios监听的几种方法比较
- ios监听某些事件的方法
- iOS 【UIKit-给Button添加监听方法】
- iOS监听某些事件的方法
- iOS监听设备方向的方法
- iOS UITapGestureRecognizer方法实现UIlable监听功能
- 监听文本框事件几种方法总结
- iOS UIImage方法总结
- iOS---常用方法总结
- iOS-UITableView方法总结
- iOS常用方法总结
- iOS 中监听观察通知的几种方法
- ios UITextView中return key点击事件的监听方法
- iOS 中监听观察通知的几种方法
- [IOS]IOS8下监听UIWebview视频全屏方法
- iOS开发中常用的分类方法---UIImage+extension
- Hadoop源码分析——数据节点写数据1
- warning: ClientCursor::staticYield can't unlock b/c of recursive lock ns的解决方法
- The identity used to sign the executable is no longer valid
- [DIV/CSS] (CSS) 不同浏览器对table中visibility属性显示的不同
- ios -- 监听方法总结
- dede 分页标题的相关
- 北京手机app定制
- C# dataTable的linq联合查询,插入到新的dataTable中
- 互联网协议入门(二)
- Docker化运维方式
- 判断radio是否被选中
- spi驱动框架全面分析,从master驱动到设备驱动
- Linux软件安装管理(二)-RPM命令管理