我们希望使用参数列表中定义的CGDataProviderCreateWithData()
回调来调用releaseData
。我们怎么做呢?
我尝试了很多选项,但是无法破解这种情况下的块语法。
以下内容:
const CGDataProviderRef provider = CGDataProviderCreateWithData(
NULL,
outputPixelDataBytes,
pixelsSize,
^void(void * __nullable info, const void * data, size_t size) {
free(data);
});
不会编译错误:
将'void(^)(void * _Nullable,const void ,size_t)'传递给 不兼容类型'CGDataProviderReleaseDataCallback的参数 _Nullable'(又名'void()(void * _Nullable,const void * _Nonnull,unsigned long)')
不知道要改变什么来消除错误。
答案 0 :(得分:2)
CGDataProviderCreateWithData()
不占用块,它需要一个函数指针,这是一种不同类型的东西。你不能像你想要的那样定义内联函数。您必须在线外定义函数并传递其地址:
static void MyReleaseCallback(void * __nullable info, const void * data, size_t size)
{
free(data);
}
...
{
...
const CGDataProviderRef provider = CGDataProviderCreateWithData(
NULL,
outputPixelDataBytes,
pixelsSize,
MyReleaseCallback);
...
}