這將產生一個不可變的字符串對象:Cocoa:測試以發現NSString是不可變的還是可變的?
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]);
那麼什麼是內部區分這些對象,以及如何測試,以便我可以輕鬆地確定一個神祕字符串變量是否是immut在做出對自己有害的事情之前能夠做到或做出改變?
Philippe下面的代碼 - if([myStringB isKindOfClass:[NSMutableString class]]) - 可以解決實際問題。 – StringSection 2010-01-19 10:36:02
我仍然對如何在內部表示不可變和可變字符串之間的差異感到好奇,以及是否可以直接檢測到(實際「NSLog打印的對象類型」)。 – StringSection 2010-01-19 10:36:44
更正:我錯了,代碼 - if([myStringB isKindOfClass:[NSMutableString class]]) - 畢竟不工作。無論字符串是NSString還是NSMutableString,它都會返回true。正如菲利普在下面所指出的(在他現在編輯的不同代碼的答案中),顯然沒有書面的方式來在運行時檢測可變與不可變對象。 – StringSection 2010-01-19 11:33:46