使用 ObjC 块作为 CGDataProviderCreateWithData 的回调
Use an ObjC Block as a callback for CGDataProviderCreateWithData
我们想调用 CGDataProviderCreateWithData()
并在参数列表中定义正确的 releaseData
回调。我们该怎么做?
我尝试了很多选项,但无法破解这种情况下的块语法。
以下:
const CGDataProviderRef provider = CGDataProviderCreateWithData(
NULL,
outputPixelDataBytes,
pixelsSize,
^void(void * __nullable info, const void * data, size_t size) {
free(data);
});
没有编译错误:
Passing 'void (^)(void * _Nullable, const void , size_t)' to
parameter of incompatible type 'CGDataProviderReleaseDataCallback
_Nullable' (aka 'void ()(void * _Nullable, const void * _Nonnull, unsigned long)')
不确定要更改什么以消除错误。
CGDataProviderCreateWithData()
不带块,它带函数指针,这是不同类型的东西。您不能像您尝试的那样定义内联函数。您将必须定义函数 out-of-line 并传递其地址:
static void MyReleaseCallback(void * __nullable info, const void * data, size_t size)
{
free(data);
}
...
{
...
const CGDataProviderRef provider = CGDataProviderCreateWithData(
NULL,
outputPixelDataBytes,
pixelsSize,
MyReleaseCallback);
...
}
我们想调用 CGDataProviderCreateWithData()
并在参数列表中定义正确的 releaseData
回调。我们该怎么做?
我尝试了很多选项,但无法破解这种情况下的块语法。
以下:
const CGDataProviderRef provider = CGDataProviderCreateWithData(
NULL,
outputPixelDataBytes,
pixelsSize,
^void(void * __nullable info, const void * data, size_t size) {
free(data);
});
没有编译错误:
Passing 'void (^)(void * _Nullable, const void , size_t)' to parameter of incompatible type 'CGDataProviderReleaseDataCallback _Nullable' (aka 'void ()(void * _Nullable, const void * _Nonnull, unsigned long)')
不确定要更改什么以消除错误。
CGDataProviderCreateWithData()
不带块,它带函数指针,这是不同类型的东西。您不能像您尝试的那样定义内联函数。您将必须定义函数 out-of-line 并传递其地址:
static void MyReleaseCallback(void * __nullable info, const void * data, size_t size)
{
free(data);
}
...
{
...
const CGDataProviderRef provider = CGDataProviderCreateWithData(
NULL,
outputPixelDataBytes,
pixelsSize,
MyReleaseCallback);
...
}