关于运行时的方法使用:objc_setAssociatedObject
来源:互联网 发布:全民奇迹源码 编辑:程序博客网 时间:2024/05/01 16:19
- (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:(void *)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);
使用函数objc_removeAssociatedObjects可以断开所有关联。通常情况下不建议使用这个函数,因为他会断开所有关联。只有在需要把对象恢复到“原始状态”的时候才会使用这个函数。
0 0
- 关于运行时的方法使用:objc_setAssociatedObject
- 关于运行时的方法使用:objc_setAssociatedObject
- objc_setAssociatedObject的使用
- objc_setAssociatedObject 关联的使用
- objc_setAssociatedObject的简单使用
- 关于运行时的方法使用:反射
- objc_setAssociatedObject 使用
- objc_setAssociatedObject 使用
- objc_setAssociatedObject 使用
- objc_setAssociatedObject 使用
- objc_setAssociatedObject与Block的简单使用
- objc_setAssociatedObject与Block的简单使用
- Objective - c 运行时关联(objc_setAssociatedObject、objc_getAssociatedObject、objc_removeAssociatedObjects)
- iOS 关于objc_setAssociatedObject,objc_getAssociatedObject
- iOS中关联对象的简单使用(objc_setAssociatedObject)
- iOS中关联对象的简单使用(objc_setAssociatedObject)
- iOS中关联对象的简单使用objc_setAssociatedObject
- Runtime的使用1 【 objc_setAssociatedObject 类添加属性】
- Java读取Properties配置文件
- C语言中strcpy与memcpy函数实现与区别
- Opencv for Android实例讲解之二
- mysql软件安装困难请看
- 【Ubuntu】Language Support 中语言安装不上
- 关于运行时的方法使用:objc_setAssociatedObject
- 复杂数据类型
- HDU 2045 不容易系列之(3)—— LELE的RPG难题
- HDU1429 胜利大逃亡(续) BFS +简单状压
- PCLint使用介绍
- gdi+ 快速绘制透明窗口
- Linux内核的示意图 [摘抄]
- linux后台开发必经之书
- 希尔排序 小讲