iOS 中 分类关联实例属性的写法有点疑问?
- (NSString *)associatedObject_copy {
return objc_getAssociatedObject(self, _cmd);
}
- (void)setAssociatedObject_copy:(NSString *)associatedObject_copy {
objc_setAssociatedObject(self, @selector(associatedObject_copy), associatedObject_copy, OBJC_ASSOCIATION_COPY_NONATOMIC);
}
上面这段代码中, _cmd
和 self
类似,只不过前者表示的是当前的SEL
。
第二个方法的第二个参数为什么不也用_cmd
呢?我理解的 _cmd
和@selector(当前方法)
不是一个意思吗?
为什么第一个方法的第二个参数用_cmd
,第二个方法的第二个参数却用@selector(xxx)
了啊?
希望能告知一二.....
啰嗦这么多:
其实我的问题主要是 在同一个方法里面,_cmd
和@selector(当前方法)
完全一样嘛?不一样,有什么区别?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
因为绑定同一个属性setter和getter肯定用的是同一个
key
,但是用_cmd
只能获取当前的方法名,所以你在set方法里面肯定要或获取跟上面相同的key
,_cmd
也是SEL
类型的参数和@selector(xxx)
一样objc_getAssociatedObject 和 objc_setAssociatedObject的第二个参数都是一个key而已
当然可以用@selector()来作为参数,其本质也是一个常量id,你上边的也说了你的
_cmd
也是一个SEL,按道理你的objc_setAssociatedObject的第二个参数应该是_cmd才对,一般用法如下定义:_cmd只能获取当前方法的名字,如果在set里面也用_cmd获取的就是“ setAssociatedObject_copy”。