作成しているテストアプリケーションでクラッシュが発生しましたが、これはメモリ管理によるものだと確信しています。この問題に関連する3つの質問があります:
質問A:
// Within singleton : GraphicsUtility
-(UIColor*)GetRandomColor
{
float l_fRandomRedColor = [[MathUtility instance] GetRandomFloatNumberBetweenNumber:0.0f AndNumber:1.0f];
float l_fRandomBlueColor = [[MathUtility instance] GetRandomFloatNumberBetweenNumber:0.0f AndNumber:1.0f];
float l_fRandomGreenColor = [[MathUtility instance] GetRandomFloatNumberBetweenNumber:0.0f AndNumber:1.0f];
return [UIColor colorWithRed:l_fRandomRedColor
green: l_fRandomGreenColor
blue: l_fRandomBlueColor
alpha: 255];
}
さて、車輪の再発明をせずにこのオブジェクトへのポインタを返す方法がわかりません。このメソッドcolorWithRed:green:blue:alpha
は(新しい)ものを割り当てたり作成したりしないので、そうすべきではないと思いますretain
。
私はautorelease
それをすべきですか?
質問B:
次のように、別のクラスでオブジェクトを取得する場合:
// Within class : Test.
// mpCurrentPieceColor is a class variable.
mpCurrentPieceColor = [[GraphicsUtility instance] GetRandomColor];
オブジェクトへのポインタを格納しているので、UIColor
もう一度保持する必要がありますか?
だから私の色を変えるとき、私はそれをするべきですか?
// Within class : Test.
// mpCurrentPieceColor is a class variable.
[mpCurrentPieceColor release];
mpCurrentPieceColor = [[GraphicsUtility instance] GetRandomColor];
[mpCurrentPieceColor retain];
私には完全に間違っているようです...
質問C:
最後に、私のdealloc
方法では、これを行っています:
// Within class : Test
-(void) dealloc
{
// never forget to call [super dealloc]
[super dealloc];
[mpCurrentPieceColor release];
}
それが正しいか ?
私が見つけた「最良の」解決策(そしてさらに悪いこと:))は、いくつかの場所でretainを使用することでした...私はもうクラッシュしませんでしたが、明らかに、メモリリークが発生しました...大歓迎です!ありがとう !