我正在使用一对使用指针作为唯一键的函数。我想声明一个常量指针用作键。这样做最安全,最清晰的方法是什么?
以下是两种可能的方法,但两者都有缺点。
自引用指针:
static const void * const propertyKey = &propertyKey;
//...
objc_getAssociatedObject(object, propertyKey);
下行:宣言长而可怕!很容易混淆那些不知道它是什么的人。 好处:一旦你明白它的作用就很难用,它很容易使用。
应引用的静态const:
static const char propertyKey;
//...
objc_getAssociatedObject(object, &propertyKey);
下行:使用时必须引用变量而不是简单地使用变量,这很容易被忽略(但编译器应该将其指出为类型不匹配)。如果声明被修改以便分配一个值,那么它可能会产生灾难性的影响,因为无法再保证指针的唯一性。 上行:声明更容易理解。
我不认为其中任何一个都是显而易见的。还有更好的建议吗?
答案 0 :(得分:2)
我也喜欢你的第一个想法。我只想去那。你的第二个想法冒着编译器可能会将多个static const char
变量合并为一个变量的风险,因为它们始终保持值0
,并且从编译器的角度来看,我不是肯定的。足够明显。而且我想不出比你的第一个想法更好的解决方案。
(取消评论中的讨论答案。)
答案 1 :(得分:1)
3:指针设置为有意义但又独特的东西:
static const void *const key = "PropertyKey";