Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/38.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 检索CGImageRef对象的保留计数?_Iphone_Objective C_Memory Management - Fatal编程技术网

Iphone 检索CGImageRef对象的保留计数?

Iphone 检索CGImageRef对象的保留计数?,iphone,objective-c,memory-management,Iphone,Objective C,Memory Management,虽然您可以使用“CGImageRelease”释放对CGImageRef对象的引用,但根据SDK,它“减少位图图像的保留计数”,是否有方法检查CGImageRef实例的当前保留计数?[cgImageRef retainCount]无效,因为cgImageRef不是retainCount消息的有效接收者 换句话说,在呈现EagleContext的类中进行dealloc期间,我希望确保释放对CGImageRef对象的所有未完成引用,但如果其保留计数已经为0,我显然不想调用CGImageRelease

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

换句话说,在呈现EagleContext的类中进行dealloc期间,我希望确保释放对CGImageRef对象的所有未完成引用,但如果其保留计数已经为0,我显然不想调用CGImageRelease(someCGImageRef)。我在实践中发现,仅仅检查image ref是否为nil与当前的retain count值不一致

在处理完CGImageRef实例并且已经发布了它之后,简单地将其设置为nil,这样(someCGImageRef==nil)检查就可以知道是否有未完成的引用,这是一种最佳实践吗


谢谢

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

好的,我看了你接下来的问题。您不应该对可能已具有0重计数的对象调用CFGetRetainCount,因为此时该对象已被销毁。相反,将其设置为NULL


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

奇怪的是,即使在测试not NULL并通过后,在我的例子中,当我试图清理EAGL上下文时,在CGImgeRef实例上调用CFGetRetainCount会崩溃。目前,我只是将CGImageRef实例设置为nil,没有发现任何泄漏。