//
// main.m
// testt
//
// Created by Young on 15/9/11.
// Copyright (c) 2015年 Young. All rights reserved.
//
#import <Foundation/Foundation.h>
@interface GetSet : NSObject
{
//{ }中原来怎么写现在还是怎么写,与@property无关
}
//@property声明的其实是变量的别名, 变量真正的名称需在实现类中使用@synthesize指定
@property NSString* str; //测试1
@property NSString* ss; //测试2
@end
@implementation GetSet
@synthesize str=myStr; //显示指定MyStr,指定str别名对应的实际名称为MyStr
//ss采用默认的 , 别名对应的实际名称是 _ss
-(void)show{
//注册监听 该对象自身作为监听器
[self addObserver:self forKeyPath:@"str" options:NSKeyValueObservingOptionNew context:nil];
}
//当str值被修改后自动回调该方法
-(void )observeValueForKeyPath:(NSString *)keyPath ofObject:(id)
object change:(NSDictionary *)change context:(void *)context{
NSLog(@"监听到 %@ %@ %@",keyPath, object, [change objectForKey:@"new"]);
}
-(void)dealloc{
//移除监听
[self removeObserver:self forKeyPath:@"str" ];
}
//-(void)setValue:(id)value forUndefinedKey:(NSString *)key{
//
//}
-(id)valueForUndefinedKey:(NSString *)key{
return nil;
}
@end
int main(int argc, const char * argv[]) {
@autoreleasepool {
GetSet* gs=[[GetSet alloc]init];
[gs show]; //注册监听
[gs setValue:@"iii" forKey:@"myStr"]; //这个样调用不会触发
[gs setStr:@"ooo"];//这样调用会触发
}
return 0;
}
打印
2015-09-19 16:29:30.438 testt[1877:100382] 监听到 str <GetSet: 0x100206a20> ooo