11

我正在使用一对使用指针作为唯一键的函数。我想声明一个常量指针用作键。执行此操作的最安全和最清晰的方法是什么?

这里有 2 种可能的方法,但这两种方法都有缺点。

  1. 自引用指针:

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

    缺点:声明很长而且看起来很吓人!很容易让不知道它的用途的人感到困惑。好处:一旦你理解了它的作用就很难使用它。

  2. 应该引用的静态常量:

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

    缺点:使用时必须引用变量而不是简单地使用,这很容易错过(但编译器应该指出这是类型不匹配)。如果修改声明以便分配一个值,那么它可能会产生灾难性的影响,因为不再能保证指针的唯一性。好处:声明更容易理解。

我认为这些都不是显而易见的。有更好的建议吗?

4

2 回答 2

2

我也喜欢你的第一个想法。我会同意的。您的第二个想法存在编译器可能会将多个static const char变量合并为一个的风险,因为它们保证始终保持该值0,并且从编译器的角度来看,我不肯定它们足够不同。而且我想不出比您的第一个想法更好的解决方案。

(从评论中的讨论中得到答案。)

于 2013-03-20T14:31:24.417 回答
1

3:设置为有意义但独特的指针:

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