【问题标题】:iphone - UIColor leaking... need to release the object?iphone - UIColor 泄漏...需要释放对象?
【发布时间】:2010-10-06 00:29:16
【问题描述】:

我的应用中有很多这样的行

UIColor *myColor = [UIColor colorWithRed:corR green:corG blue:corB alpha:1.0];

仪器显示这些线路正在泄漏。据我所知,这不是正式的分配操作(不是吗?)我没有看到释放对象的必要性,但是由于仪器抱怨,我添加了几行作为

[myColor release]

使用变量后,取悦野兽。

这样做会不会有问题,比如崩溃之类的?

显然这样做可以解决问题,但我不愿意释放未分配的对象。

你怎么看?

谢谢。


编辑

我想这是一个 xcode 问题或框架泄漏。 为了证明我用

替换了这些行
UIColor *myColor = [[UIColor alloc] initWithRed:corR green:corG blue:corB alpha:1.0];

然后对象就可以安全释放了……

这样做,解决了问题。

【问题讨论】:

  • 你是对的,你不应该释放那条线。你代码中的其他东西是罪魁祸首。 Instruments 还指向什么?
  • 仪器指向这条线......我使用的每一行都被标记为泄漏,我没有保留。如果我没记错的话,我的整个项目中没有任何保留命令。我有第二个选择:将这些行替换为 [[UIColor alloc] initWithRed: green: blue: alpha:]... 然后我可以释放它。
  • 由于颜色实际上是特殊的(基本上是单例),所以 UIColor 几乎肯定只是在做某种缓存。除非您的应用程序由于 UIColor 缓存使用的内存而一直被抛弃,否则我会忽略它。让 UIColor 缓存将加快您对颜色的访问。

标签: iphone


【解决方案1】:

不要释放对象,你不拥有它,你最终会崩溃。 UIColor 可能只是为您缓存这些颜色,而 Instruments 无法知道这一点,因此它将它们报告为泄漏(基本上是已创建的内容,您不再有引用但尚未被释放)。

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

【讨论】:

  • 谢谢。请阅读我写的关于我的问题的评论,回答 Jason McCreary...
【解决方案2】:

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

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

【讨论】:

  • 谢谢。请阅读我写的关于我的问题的评论,回答 Jason McCreary...
【解决方案3】:

有时模拟器可以在没有泄漏的情况下报告泄漏,请确保还查看设备上是否也出现相同的泄漏...

但由于使用模拟器更快,所以先尝试在那里找到东西。

【讨论】:

    猜你喜欢
    • 2011-04-27
    • 2011-03-09
    • 1970-01-01
    • 2012-01-25
    • 2021-05-21
    • 2021-08-13
    • 2010-11-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多