iOS runtime之属性冲突,多参传值

在iOS实际开发中,有时候会需要向button调用的方法中传入某些参数,除了用NSUserDefaults这类本地缓存方式进行,还可以像如下这种方法进行传参:

//需要导入    #import 
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");

如有帮助,敬请关注,谢谢!
荆轲刺秦王!

你可能感兴趣的:(iOS runtime之属性冲突,多参传值)