对于关联对象键,“static char const * const”优于“static const char”的优点是什么?

时间:2014-02-21 11:20:34

标签: ios objective-c objective-c-category

我阅读了关联对象的主题,它允许您为类别创建虚假属性。

This article建议你像这样定义密钥:

static const char kNumberKey;

看起来没有初始化但有效。

并且this article建议你做一些更复杂的事情:

static char const * const ObjectTagKey = "ObjectTag";

这种更长的形式有优势吗?我可以看到它被初始化了。但为什么const * const?为什么上面的未初始化变体有效?

1 个答案:

答案 0 :(得分:3)

在第一个示例中,kNumberKey是单个不可修改的字符,其值为零。所以它不能直接用作键(你必须取字符的地址,如:&kNumberKey

在第二个示例中,ObjectTagKey是指向一组不可修改字符的不可修改的指针。

可修改的在此上下文中意味着什么?如果指针是可修改的,您可以在代码中执行此操作:

  

ObjectTagKey =“我的新密钥”;

如果角色可以修改,你可以这样做:

  

ObjectTagKey [3] ='X';

让指针不可修改有助于避免在开发人员忘记首先使用ObjectTagKey时的应用程序开发周期中意外更改它。对于角色本身也有同样的逻辑。从软件维护的角度来看,它更安全。