我知道Java和C#在处理字符串文字时都使用字符串池来节省内存。
Objective-C 是否使用任何这样的机制?如果不是,为什么不呢?
是的,像这样的字符串文字@"Hello world"
永远不会被释放,它们指向同一个内存,这意味着指针比较是正确的。
NSString *str1 = @"Hello world";
NSString *str2 = @"Hello world";
if (str1 == str2) // Is true.
这也意味着弱字符串指针不会更改为 nil(对于普通对象会发生这种情况),因为字符串文字永远不会被释放。
__weak NSString *str = @"Hello world";
if (str == nil) // This is false, the str still points to the string literal