發送方:
//初始化通知內容 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