使用ObjC块作为CGDataProviderCreateWithData

时间:2018-03-12 19:42:38

标签: ios objective-c syntax core-graphics objective-c-blocks

我们希望使用参数列表中定义的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)')

不知道要改变什么来消除错误。

1 个答案:

答案 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);
    ...
}