您的位置:首页 > 移动开发 > IOS开发

iOS KVO 学习笔记

2016-01-16 14:35 573 查看
////
////  main.m
////  TestBasis
////
////  Created by ficow on 16/1/14.
////  Copyright © 2016年 ficow. All rights reserved.
////
//
#import <Foundation/Foundation.h>
///////////////////////////////////////////////////////////////////////////////////////////////
@interface myClass1 : NSObject
@property (nonatomic, copy) NSString *str;
@end

@implementation myClass1
@end
///////////////////////////////////////////////////////////////////////////////////////////////
@interface myClass : NSObject
{
}
@property (nonatomic, retain) myClass1 *item;
@end

@implementation myClass

- (id)init{
if(self = [super init]){
[self setValue:[[myClass1 alloc]init] forKey:@"item"];//如果不给item设置值,则最后得到的item.str为空!
}
return self;
}
/////////////////////////////////////////////////////////////////////////////////////////////
//KVO part
- (void) setItem:(myClass1 *)item{
_item = item;
[self addObserver:self forKeyPath:@"item.str" options:NSKeyValueObservingOptionNew context:nil];//1.添加监听器,监听item.str
//[self.item addObserver:self forKeyPath:@"str" options:NSKeyValueObservingOptionNew context:nil];和上面的效果一样
}

//重写监听的方法,当被监听的对象改变了,就回调监听器的这个方法
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSString *,id> *)change context:(void *)context{
NSLog(@"item.str has changed");
}

- (void)dealloc{
[self removeObserver:self forKeyPath:@"item.str"];//用完就删除监听器
}

@end
/////////////////////////////////////////////////////////////////////////////////////////////

int main(int argc, const char * argv[]) {
@autoreleasepool {
class1.item.str = @"item.str";
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: