Objective c 空字符串或1字符字符串的NSString的唯一实例
我想进一步了解XCode/Objective-C处理常量字符串的方式。我找到了一个,但我想了解更多信息。考虑下面的代码: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
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的系统上工作。所以现在我可能会访问一个空字符串,然后在它上面设置相关的对象数据,然后有另一个空字符串并与第一个冲突
目前,我已经通过创建可变字符串解决了我的问题
所以我的问题是:
objc\u setAssociatedObject
与NSString
正如@kenthomases在评论中所说的那样
通常,将objc_setAssociatedObject()与任何值类一起使用可能没有意义
其他一些示例包括
NSNumber
、NSData
和NSValue
。它们通常被缓存和重用。NSString是一个类集群。它隐藏了很多复杂性。迈克·阿什写了一些关于这方面的东西。谷歌标记了指针和Objective-C。同时,不用担心。根据需要使用isEqual:和isEqualTo:方法。通常不需要与Objective-C对象进行指针比较。通常,将objc\u setAssociatedObject()
与任何值类一起使用可能没有意义。对于值类来说,实例的“标识”并不重要,重要的是它的值(也称为内容)。