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