发送方:
//初始化通知内容 senderObject:self userInfo:接收到通知时可从中获取到的信息
+ (instancetype)notificationWithName:(NSString *)aName object:(id)senderObject userInfo:(NSDictionary *)userInfo
//发送通知
- (void)postNotification:(NSNotification *)notification
接收方(观察者,监听者):
//注册通知
- (void)addObserver:(id)notificationObserver selector:(SEL)notificationSelector name:(NSString *)notificationName object:(id)notificationSender
//取消通知
- (void)removeObserver:(id)notificationObserver
e.g.
======AppDelegate.h文件======
#import <UIKit/UIKit.h>
/*extern:声明全局变量(不初始化),外部类可访问到 */
//notificationName
extern NSString *const kSetPersonInfoNotification;
//The first-name key in the user-info dictionary of our notification
extern NSString *const kSetPersonInfoKeyFirstName;
// The last-name key in the user-info dictionary of our notification
extern NSString *const kSetPersonInfoKeyLastName;
@interface AppDelegate : UIResponder <UIApplicationDelegate>
@property (nonatomic, strong) UIWindow *window;
@end
=======AppDelegate.m文件=====
#import "AppDelegate.h"
#import "Person.h"
NSString *const kSetPersonInfoNotification = @"SetPersonInfoNotification";
NSString *const kSetPersonInfoKeyFirstName = @"firstName";
NSString *const kSetPersonInfoKeyLastName = @"lastName";
@implementation AppDelegate
- (BOOL) application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{
Person *steveJobs = [[Person alloc] init];
NSNotification *notification =
[NSNotification notificationWithName:kSetPersonInfoNotification
object:self //sender
userInfo:@{kSetPersonInfoKeyFirstName : @"Steve",
kSetPersonInfoKeyLastName : @"Jobs"}];
/* 在postNotification后,person class监听到并从notification中的userInfo中获取到了相关信息 */
[[NSNotificationCenter defaultCenter] postNotification:notification];
NSLog(@"Person's first name = %@", steveJobs.firstName);
NSLog(@"Person's last name = %@", steveJobs.lastName);
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
self.window.backgroundColor = [UIColor whiteColor];
[self.window makeKeyAndVisible];
return YES;
}
#import <Foundation/Foundation.h>
@interface Person : NSObject
@property (nonatomic, copy) NSString *firstName;
@property (nonatomic, copy) NSString *lastName;
@end
========Person.m=========#import "Person.h"
#import "AppDelegate.h"
@implementation Person
- (void) handleSetPersonInfoNotification:(NSNotification *)paramNotification{
self.firstName =paramNotification.userInfo[kSetPersonInfoKeyFirstName];
self.lastName = paramNotification.userInfo[kSetPersonInfoKeyLastName];
}
//instancetype:返回类型 id:作为参数
- (instancetype) init{
self = [super init];
if (self != nil){
NSNotificationCenter *center = [NSNotificationCenter defaultCenter];
//注册通知 addObserver必须要对应一个removeObserver,否则可能会造成内存泄漏
[center addObserver:self //观察者,监听者
selector:@selector(handleSetPersonInfoNotification:) //接收到通知时,执行的方法,必须要有一个NSNotification参数
name:kSetPersonInfoNotification //通知名称
object:[[UIApplication sharedApplication] delegate]]; //发送(通知)者
}
return self;
}
- (void) dealloc{
//取消注册
[[NSNotificationCenter defaultCenter] removeObserver:self];
}
@end