通知
#import "ThirdViewController.h"
#import "SettingViewController.h"
//注册一个通知//通过单例的方式获取通知中心对象
//第一个参数:收到通知后谁负责执行方法
//第二个参数:执行的方法
//第三个参数:通知中心的名字,用于移除或者收到通知的标志
//第四个参数:参数对象,可以为nil
[[NSNotificationCenterdefaultCenter]addObserver:selfselector:@selector(changeTheme:)name:@"Theme"object:nil];
//收到广播后执行的方法,参数为NSNotification(通知)
- (void)changeTheme:(NSNotification *)notification{
//接收通知发送的消息(以字典方式存储)
NSDictionary *dict = notification.userInfo;
//获取字典中的值,并作出相应的修改
self.view.backgroundColor = dict[@"color"];
}
//
// SettingViewController.m
// Lesson_NotificationCenter
//
// Created by Floating_SH on 15/12/12.
// Copyright © 2015年 SH. All rights reserved.
//
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
//广播通知
[[NSNotificationCenterdefaultCenter]postNotificationName:@"Theme"object:niluserInfo:@{@"color" : [UIColorgreenColor]}];
[selfdismissViewControllerAnimated:YEScompletion:nil];
}
观察者
//
// ViewController.m
// Lession18_观察者
//
// Created by Floating_SH on 15/12/11.
// Copyright © 2015年 SH. All rights reserved.
//
#import "ViewController.h"
#import "SingleVip.h"
@interface ViewController ()
@property (nonnull,strong)SingleVip * vip;
@end
@implementation ViewController
- (void)viewDidLoad {
[superviewDidLoad];
//KVO
self.vip = [SingleVipnew];
self.vip.name =@"王静文";
//void * 指空类型 context 能传递任何值
[self.vipaddObserver:selfforKeyPath:@"name"options:NSKeyValueObservingOptionNewcontext:(__bridgevoid * _Nullable)(self)];
}
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
self.vip.name =@"王菲";
}
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSString *,id> *)change context:(void *)context{
//被观察对象的属性
NSLog(@"keyPath == %@",keyPath);
//被观察的对象(self.vip)
NSLog(@"object == %@",object);
//字典
NSLog(@"%@",change[@"new"]);
//辅助传递过来的值
ViewController *vc = (__bridgeViewController *)(context);
vc.view.backgroundColor = [UIColoryellowColor];
NSLog(@"context == %@",context);
}
- (void)didReceiveMemoryWarning {
[superdidReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
@end