【发布时间】:2010-01-19 10:08:08
【问题描述】:
这会产生一个不可变的字符串对象:
NSString* myStringA = @"A"; //CORRECTED FROM: NSMutableString* myStringA = @"A";
这会产生一个可变的字符串对象:
NSMutableString* myStringB = [NSMutableString stringWithString:@"B"];
但是这两个对象被报告为同一种对象,“NSCFString”:
NSLog(@"myStringA is type: %@, myStringB is type: %@",
[myStringA class], [myStringB class]);
那么是什么在内部区分这些对象,我该如何测试,以便在对它做坏事之前轻松确定一个神秘的字符串变量是不可变的还是可变的?
【问题讨论】:
-
Philippe 下面的代码 -- if ([myStringB isKindOfClass:[NSMutableString class]]) -- 工作并解决了实际问题。
-
我仍然很好奇不可变字符串和可变字符串之间的区别是如何在内部表示的,以及是否可以直接检测到(使用 NSLog 打印的实际“对象类型”)。跨度>
-
更正:我弄错了,代码 -- if ([myStringB isKindOfClass:[NSMutableString class]]) -- 毕竟不起作用。无论字符串是 NSString 还是 NSMutableString,它都返回 true。正如 Philippe 在下面指出的(在他现在用不同代码编辑的答案中),显然没有记录在案的方法可以在运行时检测一般的可变对象和不可变对象。
标签: objective-c cocoa types immutability mutable