私はここでメモリリークのですか?
-
23-09-2019 - |
質問
私は、文字列を構築し、それを返す、以下の方法を、考えてみましょう。私は、文字列のビルディングブロックを解除したいのですが、その文字列はもはや存在しない値に基づいています。それで?
アム私はメモリをリークし、もしそうなら、どのように私はそれを修正することができますか?
- (NSString) getMiddahInEnglish:(int)day{
NSArray *middah = [[NSArray alloc] initWithObjects:@"Chesed", @"Gevurah", @"Tiferes", @"Netzach", @"Hod", @"Yesod", @"Malchus"];
NSString *firstPartOfMiddah = [NSString stringWithFormat: @"%@", [middah objectAtIndex: ((int)day% 7)-1]];
NSString *secondPartOfMiddah = [NSString stringWithFormat: @"%@", [middah objectAtIndex: ((int)day / 7)]];
NSString *middahStr = [NSString string@"%@ She'bi@%", firstPartOfMiddah, secondPartOfMiddah];
[middah release];
[firstPartOfMiddah release];
[secondPartOfMiddah release];
return middahStr;
}
はメソッド、戻り値の文字列の最後に、middahStr
がリリースされていません。これは問題ですか?メモリリークアムI?
解決
全く逆:あなたはオーバー放出されている。
のallocとinitあなたをmiddah
。そして、あなたはそれを解放します。すべてが順調です。
firstPartOfMiddah
とsecondPartOfMiddah
は、あなたがNSStringの "stringWith" 便利なメソッドを呼び出します。これはALLOC、INIT、を自動解放を呼び出すのと同じです。の彼らは、本質的に、後に解放する自動解放に与えられているとして、あなたにそれらを解放することは、間違いあります。
middahStr
あなたは便利なメソッドを呼び出して、それを返します。すべては順調です。これは、自動解放プールによって、後に解放されます。
親指のルール(私は必ず例外がたくさんありますよ):。あなたはそれのallocない場合は、それを解放しません。
所属していません StackOverflow