iOS runtime之属性冲突,多参传值
2017-07-15 本文已影响12人
oc123
在iOS实际开发中,有时候会需要向button调用的方法中传入某些参数,除了用NSUserDefaults这类本地缓存方式进行,还可以像如下这种方法进行传参:
//需要导入 #import <objc/runtime.h>
objc_setAssociatedObject(button, "key", value, OBJC_ASSOCIATION_RETAIN_NONATOMIC); //实际上就是KVC
这样就存好了,取法如下,在button调用的方法中加入如下代码:
id value = objc_getAssociatedObject(sender, "key"); //取参
value就是你之前存入key这个Key中的Value;
如果要传更多的参数,则只用更改value和对应的key就可已了,要注意的是存入对象button和取出对象sender要是同一个对象;
Pay Attention!作者在此分享一下自己在开发过程中遇到的坑,希望对读到这篇文章的人有帮助;如果你写的是如下代码:
//注意!key是@"key"形式的,这样是可以的,也可以"key"这样写
objc_setAssociatedObject(button, @"key", value, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
然后取值时要注意了,如果你如下写,将会取到nil值:
//这样写是不会报错的,但是value = nil,因为你的key传错了
id value = objc_getAssociatedObject(sender, "key");
正确的取值方式,如下:
//key要跟存储的时候完全一致,才能取出值
id value = objc_getAssociatedObject(sender, @"key");
如有帮助,敬请关注,谢谢!
荆轲刺秦王!