NSNotificationCenter 与委托(使用协议)
在iOS开发中,NSNotificationCenter和委托是两种常见的实现模式,用于实现不同对象之间的通信和数据传递。NSNotificationCenter是一种发布-订阅模式,而委托则是一种一对一的通信方式。本文将介绍NSNotificationCenter和委托的概念,并通过示例代码演示它们的用法。NSNotificationCenterNSNotificationCenter是Foundation框架中的一个类,用于实现观察者模式。它允许对象在特定事件发生时发送通知,并允许其他对象订阅这些通知以便在事件发生时作出响应。NSNotificationCenter使用了一种松耦合的方式,让对象之间的通信更加灵活。使用NSNotificationCenter的第一步是在观察者对象中注册对通知的监听。可以通过调用NSNotificationCenter的addObserver:selector:name:object:方法来实现。其中,观察者对象需要提供一个方法来处理接收到的通知。该方法需要一个NSNotification对象作为参数,用于获取通知的详细信息。下面是一个使用NSNotificationCenter的示例代码:// 定义一个观察者对象@interface Observer : NSObject- (void)handleNotification:(NSNotification *)notification;@end@implementation Observer- (void)handleNotification:(NSNotification *)notification { // 处理接收到的通知 NSLog(@"Received notification: %@", notification.name);}@end// 注册观察者对象Observer *observer = [[Observer alloc] init];[[NSNotificationCenter defaultCenter] addObserver:observer selector:@selector(handleNotification:) name:@"TestNotification" object:nil];// 发送通知[[NSNotificationCenter defaultCenter] postNotificationName:@"TestNotification" object:nil];上述代码中,我们定义了一个Observer类作为观察者对象,并实现了handleNotification:方法来处理接收到的通知。然后,我们通过调用NSNotificationCenter的addObserver:selector:name:object:方法将观察者对象注册为对名为"TestNotification"的通知的监听者。最后,我们通过调用NSNotificationCenter的postNotificationName:object:方法来发送通知。当通知被发送时,观察者对象的handleNotification:方法会被调用,从而实现对通知的响应。委托(使用协议)委托是一种常见的iOS开发模式,它用于实现对象之间的一对一通信。委托通过定义一组协议(Protocol)来规定委托方(Delegate)和被委托方(Delegatee)之间的通信规则。委托方可以将自身设置为被委托方的委托对象,并在需要的时候调用被委托方定义的方法来实现通信。使用委托的第一步是定义一个协议。协议可以包含一组方法的声明,用于规定委托方和被委托方之间的通信规则。然后,委托方需要实现该协议,并将自身设置为被委托方的委托对象。最后,被委托方可以在需要的时候调用委托方定义的方法来进行通信。下面是一个使用委托的示例代码:
// 定义一个协议@protocol Delegate上述代码中,我们定义了一个Delegate协议,并在其中声明了一个doSomething方法。然后,我们定义了一个Delegatee类作为被委托方,并在其中定义了一个performAction方法。在performAction方法中,我们首先执行一些操作,然后通过调用委托方的doSomething方法来通知委托方进行相应的操作。最后,我们创建了一个Delegatee对象和一个Delegate对象,并将Delegate对象设置为Delegatee对象的委托对象。当调用Delegatee对象的performAction方法时,委托方的doSomething方法会被调用。通过使用NSNotificationCenter和委托(使用协议),我们可以实现不同对象之间的通信和数据传递。根据具体的需求和场景,我们可以选择适合的实现方式来实现灵活、可扩展的应用程序。- (void)doSomething;@end// 委托方实现协议@interface Delegatee : NSObject@property (nonatomic, weak) id delegate;- (void)performAction;@end@implementation Delegatee- (void)performAction { // 执行一些操作 NSLog(@"Performing action"); // 调用委托方的方法 if ([self.delegate respondsToSelector:@selector(doSomething)]) { [self.delegate doSomething]; }}@end// 委托方实现协议方法@interface Delegate : NSObject @end@implementation Delegate- (void)doSomething { // 委托方执行一些操作 NSLog(@"Delegate doing something");}@end// 设置委托对象Delegatee *delegatee = [[Delegatee alloc] init];Delegate *delegate = [[Delegate alloc] init];delegatee.delegate = delegate;// 调用委托方的方法[delegatee performAction];