【发布时间】:2012-10-10 21:55:56
【问题描述】:
我正在创建的测试应用程序发生了一些崩溃,我很确定它来自内存管理。以下是与此问题相关的三个问题:
问题 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];
}
对吗?
我发现的“最佳”解决方案(也是更糟糕的 :))是在某些地方使用保留...我不再崩溃,但显然,我最终导致内存泄漏...任何帮助将不胜感激!谢谢!
【问题讨论】:
标签: objective-c pointers memory-management retain