runtime - iOS 中 分类关联实例属性的写法有点疑问?
PHP中文网
PHP中文网 2017-04-18 09:52:09
0
3
657
- (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);
}

上面这段代码中, _cmdself 类似,只不过前者表示的是当前的SEL
第二个方法的第二个参数为什么不也用_cmd呢?我理解的 _cmd@selector(当前方法)不是一个意思吗?
为什么第一个方法的第二个参数用_cmd,第二个方法的第二个参数却用@selector(xxx)了啊?
希望能告知一二.....

啰嗦这么多:

其实我的问题主要是 在同一个方法里面,_cmd@selector(当前方法) 完全一样嘛?不一样,有什么区别?

PHP中文网
PHP中文网

认证高级PHP讲师

모든 응답(3)
Peter_Zhu

같은 속성 setter와 getter를 바인딩하려면 같은 key을 사용해야 하는데, _cmd을 사용하면 현재 메소드 이름만 얻을 수 있기 때문에 set 메소드에서 위와 같은 key을 얻어야 하거나 얻어야 하기 때문입니다. . 🎜>, _cmdSEL 유형 매개변수이며 @selector(xxx)

과 동일합니다.
左手右手慢动作

objc_getAssociatedObject와 objc_setAssociatedObject의 두 번째 매개변수는 단지 키일 뿐입니다

으아아아

물론 @selector()를 매개변수로 사용할 수도 있습니다. 또한 위에서는 _cmd도 SEL이라고 언급했습니다. objc_setAssociatedObject의 두 번째 매개변수는 다음과 같습니다. _cmd 맞습니다. 일반적인 사용법은 다음과 같이 정의됩니다.

으아아아
阿神

_cmd는 현재 메소드의 이름만 가져올 수 있습니다. set에서 _cmd도 사용하면 "setAssociatedObject_copy"가 표시됩니다.

최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿