- (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(当前方法)
完全一样嘛?不一样,有什么区别?
天蓬老师2017-04-18 09:54:09
같은 속성 setter와 getter를 바인딩하려면 같은 key
을 사용해야 하는데, _cmd
을 사용하면 현재 메소드 이름만 얻을 수 있기 때문에 set 메소드에서 위와 같은 key
을 얻어야 하거나 얻어야 하기 때문입니다. . 🎜>, _cmd
도 SEL
유형 매개변수이며 @selector(xxx)
ringa_lee2017-04-18 09:54:09
objc_getAssociatedObject와 objc_setAssociatedObject의 두 번째 매개변수는 단지 키일 뿐입니다
으아아아 물론 @selector()를 매개변수로 사용할 수도 있습니다. 또한 위에서는 _cmd
도 SEL이라고 언급했습니다. objc_setAssociatedObject의 두 번째 매개변수는 다음과 같습니다. _cmd 맞습니다. 일반적인 사용법은 다음과 같이 정의됩니다.
阿神2017-04-18 09:54:09
_cmd는 현재 메소드의 이름만 가져올 수 있습니다. set에서 _cmd도 사용하면 "setAssociatedObject_copy"가 표시됩니다.