Objective-C回调和监听事件方式

本文详细介绍了Objective-C中实现事件监听的四种方法:Notification、Delegate、Block和KVO。Notification是一种广播机制,适合一对多场景,适用于不关心消息发送者的监听。Delegate采用协议模式,用于对象间的方法调用。Block允许传递代码块,具有闭包特性,常用于回调。KVO则用于监听对象特定属性的变化,无侵入性,基于Runtime实现。
摘要由CSDN通过智能技术生成

1、Notification(通知)

1.1 介绍

OS消息通知机制算是同步的,观察者只要向消息中心注册, 即可接受其他对象发送来的消息,消息发送者和消息接受者两者可以互相一无所知,完全解耦。这种消息通知机制可以应用于任意时间和任何对象,观察者可以有多个,所以消息具有广播的性质,只是需要注意的是,观察者向消息中心注册以后,在不需要接受消息时需要向消息中心注销,属于典型的观察者模式。

1.2 语法

(1)NSNotificationCenter: 实现NSNotificationCenter的原理是一个观察者模式,获得NSNotificationCenter的方法只有一种,那就是[NSNotificationCenter defaultCenter] ,通过调用静态方法defaultCenter就可以获取这个通知中心的对象了。NSNotificationCenter是一个单例模式,而这个通知中心的对象会一直存在于一个应用的生命周期。

(2) NSNotification: 这是消息携带的载体,通过它,可以把消息内容传递给观察者。

创建观察者

通过NSNotificationCenter注册通知NSNotification

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(notificationFirst:) name:@"First" object:nil];

第一个参数是观察者为本身,第二个参数表示消息回调的方法,第三个消息通知的名字,第四个为nil表示表示接受所有发送者的消息

被观察者
[[NSNotificationCenter defaultCenter] postNotificationName:@"First" object:self];
销毁观察者
[[NSNotificationCenter defaultCenter] removeObserver:self name:@"First" object:nil];

通过name单个删除

1.3 注意点

Notification和KVO功能很像,也是用于监听操作的,并且两个都能一对多.但是和KVO不同的是,KVO只用来监听属性值的变化,这个发送监听的操作是系统控的,我们控制不了,我们只能控制监听操作,类似于Android中系统发送的广播,我们只能接受。但是通知就不一样了,他的监听发送也是又我们自己控制,我们可以在任何地方任何时机发送一个通知。

2、Delegate

2.1 介绍

A完成一件事,但是自己不能完成,于是他找个代理人B 替他完成这个事情,他们之间便有个协议 (protocol),B继承该协议来完成A代理给他的事情。

2.2 语法

声明一个协议

#import <Foundation/Foundation.h>

@protocol NurseDelegate <NSObject>
@required
- (void)action1;
- (void)action2;

@optional
- (void)action3;
@end

再声明类,即代理的人

// Nurse.h文件
#import <Foundation/Foundation.h>
#import "NurseDelegate.h"

@interface Nurse : NSObject<NurseDelegate>
@end
// Nurse.m文件
#import "Nurse.h"

@imple
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值