首页 > 代码库 > KVO(键-值观察)
KVO(键-值观察)
// 1.键-值观察
// 2.它提供一种机制,当指定的对象的属性被修改后,则对象就会接受到通知。
// 3.符合KVC(Key-ValuedCoding)机制的对象才可以使用KVO
// 4.实现过程
// ①注册,指定被观察者
// ②实现回调方法
// ③移除观察
- (
void
)viewDidLoad
{
[
super
viewDidLoad
];
// Do any additional setup after loading the view from its nib.
// 实例化一个观察者对象
self
.stockForKVO
= [[
StockData
alloc
]
init
];
// 初始化
[
self
.stockForKVO
setValue
:
@"searph"
forKey
:
@"stockName"
];
// KVC
[
self
.stockForKVO
setValue
:
@"10.0"
forKey
:
@"price"
];
// KVC
// 监听并显示在 lable 里 - 注册观察者
[
self
.stockForKVO
addObserver
:
self
forKeyPath
:
@"price"
options
:
NSKeyValueObservingOptionNew
context
:nil
];
self
.myLable
.textColor
= [
UIColor
redColor
];
self
.myLable
.text
= [
self
.stockForKVO
valueForKey
:
@"price"
];
// 创建 button 按钮
UIButton
*button = [
UIButton
buttonWithType
:UIButtonTypeRoundedRect];
[button
setFrame
:CGRectMake(
9
0
,
1
5
0
,
1
4
0
,
4
2
)];
[button
setTitle
:
@"按钮"
forState
:UIControlStateNormal];
[button
addTarget
:
self
action
:
@selector
(buttonAction)
forControlEvents
:UIControlEventTouchUpInside];
[
self
.view
addSubview
:button];
}
// button响应方法
- (
void
)buttonAction
{
[
self
.stockForKVO
setValue
:
@"20.0"
forKey
:
@"price"
];
}
// 回调方法
- (
void
)observeValueForKeyPath:(
NSString
*)keyPath
ofObject
:(
id
)object
change
:(
NSDictionary
*)change
context
:(
void
*)context
{
if
([keyPath
isEqualToString
:
@"price"
])
{
self
.myLable
.text
= [
self
.stockForKVO
valueForKey
:
@"price"
];
}
}
- (
void
)dealloc
{
// 移除观察者
[
self
.stockForKVO
removeObserver
:
self
forKeyPath
:
@"price"
];
}
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。