通知和代理

一个完整的通知一般包含3个属性:

- (NSString *)name; // 通知的名称

- (id)object; // 通知发布者(是谁要发布通知)

- (NSDictionary *)userInfo; // 一些额外的信息(通知发布者传递给通知接收者的信息内容)

初始化一个通知(NSNotification)对象

+ (instancetype)notificationWithName:(NSString *)aName object:(id)anObject;

+ (instancetype)notificationWithName:(NSString *)aName object:(id)anObject userInfo:(NSDictionary *)aUserInfo;

- (instancetype)initWithName:(NSString *)name object:(id)object userInfo:(NSDictionary *)userInfo;

键盘状态改变的时候,系统会发出一些特定的通知

UIKeyboardWillShowNotification // 键盘即将显示

UIKeyboardDidShowNotification // 键盘显示完毕

UIKeyboardWillHideNotification // 键盘即将隐藏

UIKeyboardDidHideNotification // 键盘隐藏完毕

UIKeyboardWillChangeFrameNotification // 键盘的位置尺寸即将发生改变

UIKeyboardDidChangeFrameNotification // 键盘的位置尺寸改变完毕

系统发出键盘通知时,会附带一下跟键盘有关的额外信息(字典),字典常见的key如下:

UIKeyboardFrameBeginUserInfoKey // 键盘刚开始的frame

UIKeyboardFrameEndUserInfoKey // 键盘最终的frame(动画执行完毕后)

UIKeyboardAnimationDurationUserInfoKey // 键盘动画的时间

UIKeyboardAnimationCurveUserInfoKey // 键盘动画的执行节奏(快慢)

共同点

利用通知和代理都能完成对象之间的通信

(比如A对象告诉D对象发生了什么事情, A对象传递数据给D对象)

不同点

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

通知 : 多对多关系(1个对象能告诉N个对象发生了什么事情, 1个对象能得知N个对象发生了什么事情)

时间: 2024-11-07 03:42:37

通知和代理的相关文章

页面之间传值方式的总结,五种方式,通知,block,代理,单例,NSUERDEFALUT,

首先代码拿上 1:单例 2:通知 3:代理 4:block方法 5:NSUSERDEFAULT(沙盒文件) 先是单例类: .h文件 @interface DataSource : NSObject @property (nonatomic, strong) NSString *myName;//单例的属性,用于传值 +(DataSource*)sharedDataSource;//建立单例对象 @end .m文件 #import "DataSource.h" @implementati

IOS开发——UI进阶篇(五)通知、代理、kvo的应用和对比,购物车

一.通知 1.通知中心(NSNotificationCenter)每一个应用程序都有一个通知中心(NSNotificationCenter)实例,专门负责协助不同对象之间的消息通信任何一个对象都可以向通知中心发布通知(NSNotification),描述自己在做什么.其他感兴趣的对象(Observer)可以申请在某个特定通知发布时(或在某个特定的对象发布通知时)收到这个通知 2.通知(NSNotification)一个完整的通知一般包含3个属性:- (NSString *)name; // 通知

5、通知和代理区别和使用

一.代理Delegate 1.使用的场合 主要用于子控件发生某些动作时,通知父控件,子控件的代理是父控件.常见就控制器就是子控件的的代理. 2.代理的使用步骤 1> 先搞清除谁是谁的代理 2> 定义代理协议,协议名称的规范是:控件类名+Delegate 3> 定义代理方法 *代理方法一般都定义@optional *代理方法名都以控件名开头 *代理方法至少一个参数,将控件本身传递出去 4> 设置代理对象 *代理对象遵守协议 *代理对象实现协议里面的该实现的方法 5> 在恰当的时

ios开发——实用技术篇&Block/KVO/通知/代理

Block/KVO/通知/代理简单介绍与使用 关于iOS开发中数据传递的方法有很多种,但是使用最多的就是这里的四种,而且我们要学会在适当的时候使用合适的方式,才能充分的提高app的性能 下面简单介绍一下这些方法的使用 Block 第一.综述 block是OC中另外一种对象和对象的通信方式,是一对一的关系,类似于delegate,而通知时一对多的关系 第二.定义block类型 int (^myBlock)(int) 第三.block的声明 mylock=^(int a) { int result

关于 UITextField 和 键盘 的通知、代理调用顺序

从点击UITextField到键盘弹出完成,调用代理方法或发通知的顺序 textFieldShouldBeginEditing: (调代理) textFieldDidBeginEditing: (调代理) UITextFieldTextDidBeginEditingNotification (发通知) UIKeyboardWillChangeFrameNotification (发通知) UIKeyboardWillShowNotification (发通知) UIKeyboardDidShow

通知,代理,block 单例的使用和区别

区别 1.NotificationCenter 通知中心:“一对多”,在APP中,很多控制器都需要知道一个事件,应该用通知: 2.delegate 代理委托: 1,“一对一”,对同一个协议,一个对象只能设置一个代理delegate,所以单例对象就不能用代理: 2,代理更注重过程信息的传输:比如发起一个网络请求,可能想要知道此时请求是否已经开始.是否收到了数据.数据是否已经接受完成.数据接收失败 3.block(闭包) block和delegate一样,一般都是“一对一”之间通信交互,相比代理bl

ios 通知和代理的区别

区别一:delegate针对one-to-one关系,并且reciever可以返回值给sender:notification 可以针对one-to-one/many/none,reciever无法返回值给sender:所以,delegate用于sender希望接受到reciever的某个功能反馈值,notification用于通知多个object某个事件. 区别二: Delegate:消息的发送者(sender)告知接收者(receiver)某个事件将要发生,delegate同意然后发送者响应事

iOS开发——UI篇&代理/通知/Block传值(实现UItableView分组的收缩与展开)

代理/通知/Block传值实现UItableView分组的收缩与展开 初始化之后出现下面的界面 准备: 1:定义一个BOOL值用来记录点击 1 @property (nonatomic, assign, getter = isOpen) BOOL open; 2:在相应的点击方法里面是实现点击 1 self.group.open = !self.group.open; 3:在numberOfRowsInSection中返回的时候使用三木判断是否点击,并且实现伸缩与展开, 1 return mod

代理和通知

代理和通知 代理的使用步骤 定义一份代理协议 协议名字的格式一般是:类名 + Delegate 比如UITableViewDelegate 代理方法细节 一般都是@optional 方法名一般都以类名开头 比如- (void)scrollViewDidScroll: 一般都需要将对象本身传出去 比如tableView的方法都会把tableView本身传出去 必须要遵守NSObject协议 比如@protocol XMGWineCellDelegate <NSObject> 声明一个代理属性 代