通知中心
消息————注册观察者————监听有没有消息发出----------作出响应
步骤:
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:)];
}
//
改变背景颜色
- (
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
];
}
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;
.m
- (
void
)getBlockFromOutSpace:(
passColor
)color {
//
初始化
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
函数名
()
实参
self.color(color);
}
}
.m
__block
RootViewController
*root =
self
;
//
此时
second
对
root
就是弱引用
,
//
防止循环调用
,
导致的空间不能被释放掉
,
内存泄露
,
[secondVC getBlockFromOutSpace:^(UIColor *color) {
root.view.backgroundColor = color;
}];