タイトルの通りです。これを行っても、すぐに問題はありません。
- (void) associateSelector:(SEL)value withPointer:(void*)key
{
objc_SetAssociatedObject(self, key, (id) value, OBJC_ASSOCIATION_ASSIGN);
}
それを使用することに注意する正当な理由はありますか?
タイトルの通りです。これを行っても、すぐに問題はありません。
- (void) associateSelector:(SEL)value withPointer:(void*)key
{
objc_SetAssociatedObject(self, key, (id) value, OBJC_ASSOCIATION_ASSIGN);
}
それを使用することに注意する正当な理由はありますか?
ドキュメントで明示的にサポートされていない方法でAPIを使用しています。したがって、OS X/iOSの次のアップデートで壊れたときに文句を言うことはできません。それが注意すべき理由の1つです。
ドキュメントにはOBJC_ASSOCIATION_ASIGN
、弱参照を設定すると書かれています。これは、ガベージコレクションの状況では重要なことを意味するため、注意してください。
公式にサポートされている方法で物事を行う方法があれば、私はそれを好むでしょう。あなたの場合、を使用NSStringFromSelector
するとすぐにコードがサポートされます。
それは悪い考えです。Yuji が言うように、ドキュメントで定義されている API に違反しています。本当に任意の値を保存したい場合は、ラップNSValue
してOBJC_ASSOCIATION_RETAIN_NONATOMIC
.
- (void) associateSelector:(SEL)value withPointer:(void*)key {
NSValue *nsvalue = [NSValue valueWithBytes:&value objcType:@encode(SEL)];
objc_SetAssociatedObject(self, key, nsvalue, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
}