我是一个Objective-C的新手。我正在为可变性/不可变性的双重概念而挣扎。 我正在翻阅一本名为Programming in Objective-C 4th Edition的书。第15章讨论NSString
这个被声明是不可变的类。这本书则提供了一种似乎矛盾的是例如: -困惑于NSString不变性
NSString *str1 = @"this is string A";
NSString *str2 = @"this is string B";
str2 = [str1 stringByAppendingString:str2];
NSString *res;
res = [str1 substringToIndex:3];
res = [str1 substringFromIndex:5];
res = [[str1 substringFromIndex:8]substringToIndex:6];
res = [str1 substringWithRange:NSMakeRange(8, 6)];
因此,即使“资源”是一个指向一个不可变对象,它的价值几经变化的例子,所以这怎么能叫一成不变?我想我完全忽略了这一点。任何建议,感激地收到。
我明白了。感谢您的解释。所以这引出了一个问题:如果当指针指向一个新字符串时原始字符串被泄漏,那么改变一个不可变字符串是否是一个好主意? –
好点。它不会泄漏,它会自动释放(一段时间后发布),所以没关系,只要您不会每帧都自动释放数千个字符串或类似的东西。 – DrummerB