質問

私は、文字列を構築し、それを返す、以下の方法を、考えてみましょう。私は、文字列のビルディングブロックを解除したいのですが、その文字列はもはや存在しない値に基づいています。それで?

アム私はメモリをリークし、もしそうなら、どのように私はそれを修正することができますか?

- (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。そして、あなたはそれを解放します。すべてが順調です。

firstPartOfMiddahsecondPartOfMiddahは、あなたがNSStringの "stringWith" 便利なメソッドを呼び出します。これはALLOC、INIT、を自動解放を呼び出すのと同じです。の彼らは、本質的に、後に解放する自動解放に与えられているとして、あなたにそれらを解放することは、間違いあります。

middahStrあなたは便利なメソッドを呼び出して、それを返します。すべては順調です。これは、自動解放プールによって、後に解放されます。

親指のルール(私は必ず例外がたくさんありますよ):。あなたはそれのallocない場合は、それを解放しません。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top