我在创建一个测试应用程序时发生了一些崩溃,我非常肯定它来自内存管理。这里有三个与此问题相关的问题:处理保留/释放/自动释放和类变量的问题
问题答:
// 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];
}
这是对的吗 ?
我发现的“最好”解决方案(也是更糟:))是在某些地方使用保留......我没有崩溃了,但显然,我最终发生了内存泄漏......任何帮助将不胜感激 !谢谢 ! A:不要autorelease。
谢谢你的回答!我会放手一搏!我会及时通知你的! –