我一直在努力解决这个问题。基本上我使用方便的RGB UIColor函数返回UIColor来为我的UINavigationBar,UIToolbar和其他对象着色。但是出于某种原因,在仪器中,它一直在说我每次加载UIView时都有内存泄漏。任何帮助,将不胜感激。为了清晰起见,我在这里简化了代码。这是我的函数(函数有RGB和Alpha作为变量),它位于Global单例类中:
- (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;
任何人都知道问题可能是什么?提前谢谢。
答案 0 :(得分:1)
这里的问题是您可能将navigationToolbarColor
作为保留属性,因此您在这一行上过度保留:
self.navigationToolbarColor=[[[GlobalData sharedGlobalData] returnSelectedNavigationColor] retain];
摆脱对retain
的号召,你应该一切都好。
答案 1 :(得分: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;
}
然后在我的所有视图中包含#import“CustomColors.h”后,我可以像这样指定颜色:
self.navigationController.navigationBar.tintColor=[UIColor standardColor];
@end
就是这样。现在你可以在没有内存泄漏的情况下享受UIColors。
答案 2 :(得分:0)
静态解决方案绝对不是您想要做的。你用这种方式解决了一个真正问题的假阳性问题。请参阅iphone - UIColor leaking... need to release the object?
的解决方案只是不要担心“泄漏”,你没事。