私は一意のキーとしてポインタを使用する関数のペアを使用しています。私はキーとして使用する定数ポインタを宣言したい。これを行うための最も安全で明確なアプローチは何ですか?定数ポインタを宣言するための最も明白な方法は何ですか?
ここには2つの考えられる方法がありますが、いずれも短いことがあります。
自己参照ポインタ:
static const void * const propertyKey = &propertyKey; //... objc_getAssociatedObject(object, propertyKey);
ダウンサイド:宣言が長いと見て怖いです!それが何であるかわからない人を簡単に混乱させることができます。 アップサイド:ハードなことが理解できたら使いやすいです。
参照する必要がある静的定数:
static const char propertyKey; //... objc_getAssociatedObject(object, &propertyKey);
ダウンサイド:使用すると、変数が参照ではなく、単に使用し、欠場することは容易である(ただし、コンパイラは型の不一致としてこれを指摘しなければならないしなければなりません)。値が割り当てられるように宣言が変更された場合、ポインタの一意性が保証されなくなる可能性があるため、悲惨な影響を及ぼす可能性があります。 Upside:宣言は簡単です。
私はどちらもすぐにはわかりません。より良い提案はありますか?
どの問題を解決しようとしていますか? – Sebivor
私は、静的変数へのポインタをアセンブル配列のキーとして使用することには利点がないようです。なぜ静的変数を使用しないのですか? – Sebivor
@modifiablelvalue 'objc_setAssociatedObject()'はキーが 'void'へのポインタである必要があるためです。 –