来源:http://www.maiziedu.com/article/10934/
http://blog.csdn.net/yadonghaoren/article/details/39483687
- - (void)viewDidLoad
- {
- [super viewDidLoad];
- NSString * overview = @"overview";
- self.model= [[DataModel alloc] init];
- [self.model setValue:@"searph" forKey:@"stockName"];
- [self.model setValue:@"10.0" forKey:@"price"];
- [self.model addObserver:self forKeyPath:@"price" options:NSKeyValueObservingOptionNew|NSKeyValueObservingOptionOld context:NULL];
- <span style="color:#ff0000;">objc_setAssociatedObject</span>(self.model, &overviewKey, overview, OBJC_ASSOCIATION_RETAIN);
- }
- -(IBAction)btnpressed:(id)sender
- {
- [self.model setValue:@"20.0" forKey:@"price"];
- }
- <pre name="code" class="objc">-(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(voidvoid *)context
- {
- if([keyPath isEqualToString:@"price"]){
- NSLog(@"changeDic = %@",change);
- NSString * associatedObject = (NSString *)<span style="color:#ff0000;">objc_getAssociatedObject</span>(self.model, &overviewKey);
- NSLog(@"associatedObject >>>>>>> %@",associatedObject);
- }
- }
- 2014-09-22 23:01:25.470 TestAssociatedObject[61080:60b] changeDic = {
- kind = 1;
- new = 20;
- old = 10;
- }
- 2014-09-22 23:01:25.471 TestAssociatedObject[61080:60b] associatedObject >>>>>>> overview
创建关联:
创建关联要使用到Objective-C的运行时函数:objc_setAssociatedObject来把一个对象与另外一个对象进行关联。
- <span style="color:#ff0000;">objc_setAssociatedObject</span>(self.model, &overviewKey, overview, OBJC_ASSOCIATION_RETAIN);
关键字是一个void类型的指针,每个关联的关键字必须是唯一的,通常用静态变量作为关键字。
关联策略表明了相关的对象是通过赋值,保留引用还是复制的方式进行关联的;
获取相关联的对象:
- NSString * associatedObject = (NSString *)<span style="color:#ff0000;">objc_getAssociatedObject</span>(self.model, &overviewKey);
断开关联:
断开关联是使用objc_setAssociatedObject函数,传入nil值即可
- <span style="color: rgb(255, 0, 0);">objc_setAssociatedObject</span>(self.model, &overviewKey, nil, OBJC_ASSOCIATION_RETAIN);