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对象,因此变量的类型应该反映这一点。