【问题标题】:UIColor -initWithRed:green:blue:alpha: memory leak?UIColor -initWithRed:green:blue:alpha: 内存泄漏?
【发布时间】: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的情况:

有什么想法吗?

【问题讨论】:

    标签: iphone ios ios4 ios-4.2


    【解决方案1】:

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

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

    【讨论】:

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

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

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-03-30
      • 2011-03-16
      • 1970-01-01
      • 1970-01-01
      • 2011-10-08
      • 2013-01-20
      • 2011-10-31
      • 2019-08-10
      相关资源
      最近更新 更多