IOS NSStringのメモリ管理


このように書くとメモリが漏れると思っていました!しかし、私は本当に間違っているようです.
NSString *textStr = @"abc";
if (YES) {
   textStr = @"def";
}
NSLog(@"textStr is %@", textStr);

OCには定数文字列(NSConstantString)の概念があり、手動releaseは必要ないので、このように書くのは少しも問題ありません.私はまた次のようにテストしました.
NSString *str = @"dddd";
while (YES) {
    str = @"aaaaaaaaa";
    NSLog(@"%@   %d", str, str.retainCount);
}

10分も動いたのに、メモリが少しも上がらず、次のようなテストをしました.
NSArray *array = @[@"dddd", @"dddd"];
while (YES) {
        array = @[@"dddddddddd"];
        NSLog(@"%@", array[0]);
}

実行中、メモリは直線的に上昇し、2つのテストcpuはほぼ満タンになりました.
次のテストを間違えました
NSString *str = @"dddd";
    while (YES) {
        str = [[NSString alloc] initWithString:@"4321"];
        NSLog(@"%@   %d", str, str.retainCount);
    }

結局メモリは上昇しないので、本当に大丈夫ですが、最後にこのような状況はお勧めしません.公式サイトのメモリ管理の原則に従うため、releaseを加える必要があります.
また、このように書いても間違いはありません.
view source
print ?
NSString *str = @"dddd";
    [str release];
    NSLog(@"str is %@", str);