IOS NSStringのメモリ管理
このように書くとメモリが漏れると思っていました!しかし、私は本当に間違っているようです.
OCには定数文字列(NSConstantString)の概念があり、手動releaseは必要ないので、このように書くのは少しも問題ありません.私はまた次のようにテストしました.
10分も動いたのに、メモリが少しも上がらず、次のようなテストをしました.
実行中、メモリは直線的に上昇し、2つのテストcpuはほぼ満タンになりました.
次のテストを間違えました
結局メモリは上昇しないので、本当に大丈夫ですが、最後にこのような状況はお勧めしません.公式サイトのメモリ管理の原則に従うため、releaseを加える必要があります.
また、このように書いても間違いはありません.
view source
print ?
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);