UIColor -initWithRed:green:blue:alpha: 内存泄漏?

Posted

技术标签:

【中文标题】UIColor -initWithRed:green:blue:alpha: 内存泄漏?【英文标题】:UIColor -initWithRed:green:blue:alpha: memory leak? 【发布时间】:2011-11-06 14:22:45 【问题描述】:

我有这种情况:

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 *color = [[UIColor alloc] initWithRed:0/255.f green:156/255.f blue:255/255.f alpha:1] 中接收内存泄漏;

Instruments的情况:

有什么想法吗?

【问题讨论】:

【参考方案1】:

您将局部变量“颜色”设置为 nil,然后执行 [nil release] 什么都不做。

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

【讨论】:

只需将两个语句放在一行即可解决:[color release], color = nil; 是的,这个作品[颜色发布];。我错了,我真的不需要这种颜色 = nil;谢谢!【参考方案2】:

泄漏工具向您显示泄漏的东西被分配到哪里。

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

尝试运行仪器一段时间(使用模拟器),然后发送内存警告以查看 UIColor 是否会清除其缓存。无论哪种方式,您都无法真正解决核心框架内部发生的泄漏问题,所以不要尝试。只要确保你实际上并没有以某种方式泄露它们(比如在某个时候保留它们并且永远不会释放它们)。

如果上面的代码就是你所做的一切,那么color 绝对不会泄漏。如果您将该对象保留在其他任何地方而不释放它,则它正在泄漏。

永远不要释放您不记得保留的对象。曾经。但我怀疑你只是将它保留在某个地方,甚至没有注意到它。

【讨论】:

以上是关于UIColor -initWithRed:green:blue:alpha: 内存泄漏?的主要内容,如果未能解决你的问题,请参考以下文章

从 UserDefaults 保存/获取 UIColor

UIColor间的过渡算法

UIColor间的过渡算法

UIColor与PatternImage

如何使用 c# 在 Xamarin.Ios 中将 UIColor 转换为字符串和字符串转换为 UIColor

将 UIColor 存储在 CoreData 中