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

同じ属性のセッターとゲッターをバインドするには同じ key を使用する必要がありますが、_cmd を使用すると現在のメソッド名しか取得できないため、set メソッドで上記と同じ key を取得する必要があります。 . 🎜>、_cmdSEL 型パラメータであり、@selector(xxx)

と同じです。
いいねを押す +0
左手右手慢动作

objc_getAssociatedObject と objc_setAssociatedObject の 2 番目のパラメーターは単なるキーです

リーリー

もちろん、@selector() をパラメータとして使用することもできます。その本質は定数 ID でもあります。論理的に言えば、objc_setAssociatedObject の 2 番目のパラメータも SEL である必要があると述べました。 _cmd そうです、一般的な使用法は次のように定義されています: _cmd リーリー

いいねを押す +0
阿神

_cmd は現在のメソッドの名前のみを取得できます。set で _cmd も使用すると、「setAssociatedObject_copy」が取得されます。

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート