Я использую пару функций, которые используют указатель как уникальный ключ. Я хочу объявить постоянный указатель для использования в качестве ключа. Какой самый безопасный и ясный способ сделать это?
Вот два возможных подхода, но оба из них имеют короткие приходы.
-
Указатель саморегуляции:
static const void * const propertyKey = &propertyKey; //... objc_getAssociatedObject(object, propertyKey);
Даунсайд: декларация длинная и страшно выглядит! Может легко смутить кого-то, кто не знает, для чего это. Потенциал: жесткий, когда вы понимаете, что он делает это легко использовать.
-
Статическая константа, на которую нужно ссылаться:
static const char propertyKey; //... objc_getAssociatedObject(object, &propertyKey);
Нижняя сторона: при использовании переменная должна ссылаться, а не просто использоваться, что легко пропустить (но компилятор должен указать это как несоответствие типа). Если объявление изменено так, что ему присвоено значение, оно может иметь катастрофические последствия, поскольку уникальность указателя больше не может быть гарантирована. Потенциал: декларация легче проверять.
Я не думаю, что одно из них сразу же очевидно. Любые лучшие предложения?