Objective c 此处是否有必要释放CFD以防止泄漏?

Objective c 此处是否有必要释放CFD以防止泄漏?,objective-c,core-graphics,Objective C,Core Graphics,所以我听说newalloc和copy在您负责的堆上创建新内存。我想确保Core Graphics中的C函数也是如此: myIvar=CGDataProviderCopyData(CGImageGetDataProvider(cgImage)) 这是否意味着我必须稍后发布它,如: CFRelease(myIvar) 换句话说,如果我稍后在没有发布声明的情况下重新分配myIvar,它将导致泄漏? 关于评论,我上传了以下截图: 注释掉的行工作正常。在这行之前,我有m_parsedImage=CGDa

所以我听说
new
alloc
copy
在您负责的堆上创建新内存。我想确保Core Graphics中的C函数也是如此:

myIvar=CGDataProviderCopyData(CGImageGetDataProvider(cgImage))

这是否意味着我必须稍后发布它,如:

CFRelease(myIvar)

换句话说,如果我稍后在没有发布声明的情况下重新分配
myIvar
,它将导致泄漏?

关于评论,我上传了以下截图:


注释掉的行工作正常。在这行之前,我有
m_parsedImage=CGDataProviderCopyData(CGImageGetDataProvider(cgImage))
也可以正常工作。

是的,按照惯例,任何名称中带有“复制”或“创建”的函数都会返回您必须发布的内容

在本例中,快速查看
CGDataProviderCopyData
的文档将显示:

返回值
包含提供程序数据副本的新数据对象。您负责释放此对象


在发布此类问题之前,请先查看文档。你会为自己节省很多时间。:)

多谢各位。我是根据教科书中的一些代码编写的,在这个案例中使用了
CFRelease
,所以听起来好像不正确。使用CFRelease而不是
CGDataProviderRelease
是否会导致问题?有趣的是,
CGDataProviderRelease(m_parsedImage)导致编译器出现函数未找到错误,而
CFRelease(m_parsedImage)工作正常。在同一个文件中,我可以毫无问题地使用
CGDataProviderCopyData
。这就是为什么选择只使用
CFRelease
@SebbyJohanns:
CGDataProviderRelease
的教科书一直存在的原因。确保名称拼写正确。相关文档:@SebbyJohanns:No;函数返回一个CFData对象,因此变量的类型应该反映这一点。