通知中心
消息————注册观察者————监听有没有消息发出----------作出响应
步骤:
1. 注册观察者
2.发送消息
3.移除
KVO
使用方法:
1.
- (
void
)viewDidLoad {
[
super
viewDidLoad
];
// 注册观察者
[[ NSNotificationCenter defaultCenter ] addObserver : self selector : @selector (changeColor:) name : @"change" object : nil ];
self . navigationItem . leftBarButtonItem = [[ UIBarButtonItem alloc ] initWithTitle : @" 跳转 " style : UIBarButtonItemStylePlain target : self action : @selector (skip:)];
// 注册观察者
[[ NSNotificationCenter defaultCenter ] addObserver : self selector : @selector (changeColor:) name : @"change" object : nil ];
self . navigationItem . leftBarButtonItem = [[ UIBarButtonItem alloc ] initWithTitle : @" 跳转 " style : UIBarButtonItemStylePlain target : self action : @selector (skip:)];
}
//
改变背景颜色
- ( void )changeColor:( NSNotification *)notify {
UIColor *color = [notify object ];
self . view . backgroundColor = color;
// self.view.backgroundColor = notify.object;
- ( void )changeColor:( NSNotification *)notify {
UIColor *color = [notify object ];
self . view . backgroundColor = color;
// self.view.backgroundColor = notify.object;
}
2.
- (
void
)viewWillDisappear:(
BOOL
)animated {
UIColor
*color = [
UIColor
colorWithRed
:
arc4random
() %
256
/
255.0
green
:
arc4random
() %
256
/
255.0
blue
:
arc4random
() %
256
/
255.0
alpha
:
1.0
];
// 发送消息
// 发送消息
[[NSNotificationCenter defaultCenter] postNotificationName:@"change" object:color];
}
3.
- (
void
)dealloc {
//3. 移除观察者
[[ NSNotificationCenter defaultCenter ] removeObserver : self name : @"change" object : nil ];
[ super dealloc ];
//3. 移除观察者
[[ NSNotificationCenter defaultCenter ] removeObserver : self name : @"change" object : nil ];
[ super dealloc ];
}
Block
.h
//
返回值
(
名字
)(
将来要传的参数
)
//1. 重命名 Block
typedef void (^passColor)( UIColor *color);
@interface SecondViewController : UIViewController
//2. 创建一个 Block 对象
//copy: 是因为刚开始并不执行 , 拷贝复制一份 , 放在一个地方 , 当需要的时候才会开始执行
@property ( nonatomic , copy ) passColor color;
//3. 创建方法从外界传入一个 Block
- ( void )getBlockFromOutSpace:( passColor )color;
//1. 重命名 Block
typedef void (^passColor)( UIColor *color);
@interface SecondViewController : UIViewController
//2. 创建一个 Block 对象
//copy: 是因为刚开始并不执行 , 拷贝复制一份 , 放在一个地方 , 当需要的时候才会开始执行
@property ( nonatomic , copy ) passColor color;
//3. 创建方法从外界传入一个 Block
- ( void )getBlockFromOutSpace:( passColor )color;
.m
- (
void
)getBlockFromOutSpace:(
passColor
)color {
// 初始化 Block 对象
// 遵循原则 : 谁创建 , 谁调用 ; 谁想用 , 谁负责实现
// 初始化 Block 对象
// 遵循原则 : 谁创建 , 谁调用 ; 谁想用 , 谁负责实现
self.color = color;
}
- (
void
)viewWillDisappear:(
BOOL
)animated {
UIColor *color = [UIColor colorWithRed:arc4random() % 256 / 255.0 green:arc4random() % 256 / 255.0 blue:arc4random() % 256 / 255.0 alpha:1.0];
if
(
self
.
color
) {
// 调用 Block 函数名 () 实参
// 调用 Block 函数名 () 实参
self.color(color);
}
}
.m
__block
RootViewController
*root =
self
;
//
此时
second
对
root
就是弱引用
,
//
防止循环调用
,
导致的空间不能被释放掉
,
内存泄露
,
[secondVC getBlockFromOutSpace:^(UIColor *color) {
root.view.backgroundColor = color;
}];