我在創建一個測試應用程序時發生了一些崩潰,我非常肯定它來自內存管理。這裏有三個與此問題相關的問題:處理保留/釋放/自動釋放和類變量的問題
問題答:
// 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。
謝謝你的回答!我會放手一搏!我會及時通知你的! –