2011-11-06 81 views
2

予有这种情况:UIColor -initWithRed:green:blue:alpha:内存泄露?

UIColor *color = [[UIColor alloc] initWithRed:0/255.f green:156/255.f blue:255/255.f alpha:1]; 
self.lightBlue = color; 
color = nil; 
[color release]; 

而在的UIColor *颜色= [[ALLOC的UIColor]接收memoery泄漏initWithRed:0/255.f绿:156/255.f蓝:255/255.f阿尔法:1];

从仪器的情况: instruments situation

任何想法?

回答

5

你正在设置你的局部变量'color'为零,然后做[无释放],它什么都不做。

如果你真的需要'color = nil',你应该在发布之后再做。

+0

可以通过只有两条语句在一行上解决:'[color release],color = nil;' – Joost

+0

是的这项工作[color release] ;.我错了我不真的需要这个颜色=零;谢谢! – donjordano

1

泄漏工具会告诉你哪里有泄漏的东西被分配。

所以它的意思是,在你分配这些值后,它们从未被释放 - 这似乎意味着你的导航控制器在它应该被释放时不会被释放。不要释放对象,你不拥有它,你最终会崩溃。 UIColor可能只是为你缓存这些颜色,而Instruments没有办法知道这一点,所以它会将它们报告为泄漏(基本上是已创建的东西,而您不再提及但未被释放)。

尝试运行一段时间的仪器(使用模拟器),然后发送内存警告以查看UIColor是否会清除其缓存。无论哪种方式,没有任何事情可以解决核心框架内发生的泄漏问题,所以不要尝试。只要确保你实际上没有泄漏它们(例如在某个时刻保留它们,而不是释放它们)。底线是如果上面的代码是你所做的全部,color是绝对不会泄漏的。如果你将这个物体保留在其他地方而没有释放它,它就会漏水。

切勿释放您不记得保留的对象。 EVER。但我怀疑你只是保留在某个地方,甚至没有注意到它。