我正在使用objc_[sg]etAssociatedObject()
,此函数使用内存地址作为键。如果我传递相同的字符串文字 - 例如"UIImageForTexture"
- 从两个不同的文件进入函数,两个字符串文字将具有:
我可以通过将文字放在某个文件中并通过extern
引用它来更明确地做到这一点,但我想知道我是否可以避免这样做。
答案 0 :(得分:2)
具有相同内容的两个字符串文字(例如char *p1="abc;
char *p2="abc";
)是否具有相同的地址或不同的地址是实现细节。 p1
和p2
可能相等或不相等。 C标准不保证它们都没有。
所以答案是(3)它取决于的实现/优化。
您可以使用指向它们的指针而不是直接传递字符串文字。这样,你可以可靠地处理它们而不用担心(1)和(2)。
这可能是有意义的:Addresses of two pointers are same?
答案 1 :(得分:2)
这将是来自C99标准草案部分6.4.5
字符串文字段落 6 的实现定义行为:
如果这些数组的元素具有不同的数据,则未指定 适当的价值观如果程序试图修改这样的数组,则行为是 未定义。