2011-05-04 121 views
1

我一直在試圖解決這個問題。基本上我使用便利的RGB UIColor函數來返回一個UIColor來給我的UINavigationBar,UIToolbar和其他對象着色。然而,由於某些原因,在儀器中它一直說我每次加載UIView時都有內存泄漏。任何幫助,將不勝感激。爲了清晰起見,我在此簡化了代碼。這裏是我的功能(該功能具有RGB和Alpha作爲變量),它位於全球單例類:UIColor內存泄漏問題

- (UIColor *)returnSelectedColor{ 
    return [UIColor colorWithRed:(100)/255.0 green:(100)/255.0 blue:(100)/255.0 alpha:(1.0)]; 
} 

在我的RootViewController的我設置在viewWillAppear中(有時色調可以調用之間卻改變我嘗試過ViewDidLoad,但問題仍然存在)。我嘗試了兩種不同的方法來解決這個問題,但泄漏仍然存在。

第一種方法是隻設置色調時視圖出現這樣的:

self.navigationController.navigationBar.tintColor=[[GlobalData sharedGlobalData] returnSelectedNavigationColor]; 

第二種方法是爲視圖創建的UIColor屬性,將其設置爲期望的UIColor,然後設置導航欄色彩到這個屬性,當視圖關閉時,我釋放該屬性。這種方法也會導致內存泄漏。這裏是代碼:

if(self.navigationToolbarColor!=nil){ 
     [self.navigationToolbarColor release]; 
    } 
    self.navigationToolbarColor=[[[GlobalData sharedGlobalData] returnSelectedNavigationColor] retain]; 

self.navigationController.navigationBar.tintColor=self.navigationToolbarColor; 

任何人有什麼問題的想法可能是?提前致謝。

回答

1

這裏的問題是,你可能有navigationToolbarColor爲保留的財產,所以你在保持在這條線:

self.navigationToolbarColor=[[[GlobalData sharedGlobalData] returnSelectedNavigationColor] retain]; 

擺脫調用到retain那裏,你應該是所有良好。

+0

感謝您的回覆。不過,我試過,但我仍然得到相同的內存泄漏。我使用的第一種方法沒有保留(沒有屬性)並導致內存泄漏。我嘗試使用沒有保留的屬性,如你所建議的,這也給內存泄漏。我只想到了一些事情,這可能是因爲我的函數是在單例對象中嗎? – 2011-05-05 00:46:16

+0

不,那不是。 self.navigationToolbarColor = [UIColor colorWithRed:(39)/255.0 green:(64)/255.0 blue:(139)/255.0 alpha:(1.0)]我直接嘗試這樣做,而不是調用一個函數並仍然出現內存泄漏。 ;在我將其分配給導航控制器的色調之後,我應該在什麼地方釋放UIColor?我認爲這不是必須的,因爲它應該是一個自動發佈的對象。任何線索或想法都會有所幫助。 – 2011-05-05 00:53:47

0

我發現解決方案基本上添加類別到UIColor對象。這會創建我自定義的顏色對象,並保留在內存中。這樣當我在不同視圖中的不同對象中設置我的色調時,我不會再有任何內存泄漏。以下是一些示例代碼,如果有人遇到同樣的問題。

這裏是CustomColors.h文件

#define RGBCOLOR(r,g,b,a) [UIColor colorWithRed:(r)/255.0 green:(g)/255.0 blue:(b)/255.0 alpha:(a)] 

@interface UIColor (CustomColors) 

+ (UIColor *)standardColor:(int)selectedAlpha; 

@end 

這裏是CustomColors.m文件

#import "CustomColors.h" 

@implementation UIColor (CustomColors) 

    + (UIColor *)standardColor{ 
     static UIColor *customColor = nil; 

     if (!customColor){ 
      customColor = RGBCOLOR(135,153,188,1.0); 
      [customColor retain]; 
     } 
     return customColor; 
    } 

然後包括我所有的意見,我可以指定#進口 「CustomColors.h」 後我的顏色像這樣:

self.navigationController.navigationBar.tintColor=[UIColor standardColor]; 

@end

就是這樣。現在,您可以在沒有內存泄漏的情況下享受UIColors。

+1

非常強烈建議不要這種解決方案。請參閱我的答案。 – 2011-09-08 17:12:23