我正在创建的测试应用程序中发生了一些崩溃,我很确定它来自内存管理。以下是与此问题相关的三个问题:
问题一:
// 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
应该吗?
问题乙:
现在在另一个类中获取对象时,如下所示:
// 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];
}
这是对的吗 ?
我发现的“最佳”解决方案(也是更糟糕的:))是在某些地方使用保留......我没有再崩溃了,但显然,我最终出现了内存泄漏......任何帮助都是非常感激 !谢谢 !