我阅读了关联对象的主题,它允许您为类别创建虚假属性。
This article建议你像这样定义密钥:
static const char kNumberKey;
看起来没有初始化但有效。
并且this article建议你做一些更复杂的事情:
static char const * const ObjectTagKey = "ObjectTag";
这种更长的形式有优势吗?我可以看到它被初始化了。但为什么const * const?为什么上面的未初始化变体有效?
答案 0 :(得分:3)
在第一个示例中,kNumberKey
是单个不可修改的字符,其值为零。所以它不能直接用作键(你必须取字符的地址,如:&kNumberKey
。
在第二个示例中,ObjectTagKey
是指向一组不可修改字符的不可修改的指针。
可修改的在此上下文中意味着什么?如果指针是可修改的,您可以在代码中执行此操作:
ObjectTagKey =“我的新密钥”;
如果角色可以修改,你可以这样做:
ObjectTagKey [3] ='X';
让指针不可修改有助于避免在开发人员忘记首先使用ObjectTagKey
时的应用程序开发周期中意外更改它。对于角色本身也有同样的逻辑。从软件维护的角度来看,它更安全。