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: 内存泄漏?的主要内容,如果未能解决你的问题,请参考以下文章