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