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

在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");

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容