【问题标题】:Retrieving the retain count for a CGImageRef object?检索 CGImageRef 对象的保留计数?
【发布时间】:2010-10-08 21:31:49
【问题描述】:

虽然您可以使用“CGImageRelease”释放对 CGImageRef 对象的引用,根据 SDK 这“减少位图图像的保留计数”,有没有办法检查 CGImageRef 实例的当前保留计数? [cgImageRef retainCount] 无效,因为 CGImageRef 不是 retainCount 消息的有效接收者。

换句话说,在呈现 EAGLContext 的类中的 dealloc 期间,我想确保释放对 CGImageRef 对象的任何未完成的引用,但如果保留计数已经为 0,我显然不想调用 CGImageRelease(someCGImageRef) . 我在实践中发现,仅检查图像 ref 是否为 nil 与当前的保留计数值不一致。

在你完成它并且你已经释放它之后简单地将 CGImageRef 实例设置为 nil 是一个最佳实践,以便检查 (someCGImageRef == nil) 让你知道是否有一个优秀的参考给它?

谢谢

【问题讨论】:

    标签: iphone objective-c memory-management


    【解决方案1】:

    如果我正确阅读了文档,CGImageRelease 就像 CFRelease 一样,只是它处理 NULL 的方式不同。这意味着只要 cgImageRef 不为 NULL,CFGetRetainCount 就应该工作。

    好的,之后我阅读了您的其余问题。您不应该对可能已经具有 0 的 retainCount 的对象调用 CFGetRetainCount,因为到那时该对象已经被销毁。而是将其设置为 NULL。

    (NULL 和 nil 是等价的,但 nil 用于 Objective-C 对象。CGImageRef 不是其中之一,因此您可能应该使用 NULL 以避免以后混淆。)

    【讨论】:

    • 奇怪的是,即使在测试非 NULL 并通过后,当我尝试清理 EAGL 上下文时,在 CGImgeRef 实例上调用 CFGetRetainCount 也会崩溃。现在我只是将 CGImageRef 实例设置为 nil 并且我没有看到任何泄漏。
    猜你喜欢
    • 1970-01-01
    • 2011-07-21
    • 1970-01-01
    • 1970-01-01
    • 2017-08-26
    • 1970-01-01
    • 1970-01-01
    • 2020-04-22
    • 2014-12-09
    相关资源
    最近更新 更多