Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 空字符串或1字符字符串的NSString的唯一实例_Objective C - Fatal编程技术网

Objective c 空字符串或1字符字符串的NSString的唯一实例

Objective c 空字符串或1字符字符串的NSString的唯一实例,objective-c,Objective C,我想进一步了解XCode/Objective-C处理常量字符串的方式。我找到了一个,但我想了解更多信息。考虑下面的代码: NSString *a = [[NSString alloc] initWithUTF8String:[[_textFieldA stringValue] UTF8String]]; NSString *b = [[NSString alloc] initWithUTF8String:[[_textFieldB stringValue] UTF8String]]; NSStr

我想进一步了解XCode/Objective-C处理常量字符串的方式。我找到了一个,但我想了解更多信息。考虑下面的代码:

NSString *a = [[NSString alloc] initWithUTF8String:[[_textFieldA stringValue] UTF8String]];
NSString *b = [[NSString alloc] initWithUTF8String:[[_textFieldB stringValue] UTF8String]];
NSString *c = [a copy];
NSString *d = [a mutableCopy];
请注意,textFields只是在运行时设置字符串的一种方法,确保编译器不会对我过于敏感,而是在单个实例中构建

如果我的文本字段为空,或包含单个字符,如“x”或“$”,则a==b==c==相同的常量NSString实例。如果我改为提供“xy”,那么a==c!=Bd总是唯一的,因为它是可变的

现在,通常这不会是一个问题,我不会试图修改这些字符串的内容,但是,我正在一个经常使用objc_setAssociatedObject的系统上工作。所以现在我可能会访问一个空字符串,然后在它上面设置相关的对象数据,然后有另一个空字符串并与第一个冲突

目前,我已经通过创建可变字符串解决了我的问题

所以我的问题是:

  • 这是Objective-C规范还是XCode偏心
  • 有人知道如何确定实例吗?为什么“x”是一个实例,而不是“xy”?我认为这涉及到一些内部词典,没有充分的理由停止使用1个字符
  • 有没有办法关闭此选项,使所有空字符串都是唯一的实例,或者其他建议
  • 我使用的是XCode 5.1.1、OSX 10.9.4、SDK 10.9

    谢谢大家!

    这是Objective-C规范还是XCode偏心

    这只是实现细节。在任何地方都没有记录。这种行为将来可能会改变,恕不另行通知

    有人知道如何确定实例吗?为什么“x”是一个实例,而不是“xy”?我认为这涉及到一些内部词典,没有充分的理由停止使用1个字符

    除非有人能够访问源代码并希望与我们共享详细信息,否则不会

    有没有办法关闭此选项,使所有空字符串都是唯一的实例,或者其他建议

    没办法关掉它。不要将
    objc\u setAssociatedObject
    NSString


    正如@kenthomases在评论中所说的那样


    通常,将objc_setAssociatedObject()与任何值类一起使用可能没有意义


    其他一些示例包括
    NSNumber
    NSData
    NSValue
    。它们通常被缓存和重用。

    NSString是一个类集群。它隐藏了很多复杂性。迈克·阿什写了一些关于这方面的东西。谷歌标记了指针和Objective-C。同时,不用担心。根据需要使用isEqual:和isEqualTo:方法。通常不需要与Objective-C对象进行指针比较。通常,将
    objc\u setAssociatedObject()
    与任何值类一起使用可能没有意义。对于值类来说,实例的“标识”并不重要,重要的是它的值(也称为内容)。