11

ポインターを一意のキーとして使用する関数のペアを使用しています。キーとして使用する定数ポインタを宣言したいと思います。これを行うための最も安全で明確なアプローチは何ですか?

ここに 2 つの可能なアプローチがありますが、どちらも短所があります。

  1. 自己参照ポインター:

    static const void * const propertyKey = &propertyKey;
    //...
    objc_getAssociatedObject(object, propertyKey);
    

    欠点: 宣言が長くて恐ろしく見える! それが何のためにあるのかわからない人を簡単に混乱させる可能性があります。利点: それが何をするかを理解すれば、それは使いやすいです。

  2. 参照する必要がある static const:

    static const char propertyKey;
    //...
    objc_getAssociatedObject(object, &propertyKey);
    

    欠点: 変数を使用する場合、単純に使用するのではなく参照する必要があるため、見落としがちです (ただし、コンパイラはこれを型の不一致として指摘する必要があります)。値が代入されるように宣言を変更すると、ポインタの一意性が保証されなくなるため、壊滅的な影響が生じる可能性があります。利点: 宣言の方が理解が容易です。

これらのどちらもすぐには明らかではないと思います。より良い提案はありますか?

4

2 に答える 2

1

3: 意味のある、しかしユニークなものに設定されたポインター:

static const void *const key = "PropertyKey";
于 2013-03-19T10:05:59.193 に答える