【问题标题】:Does an audio queue callback function have to be a C style function? Or can it be an objective C style method?音频队列回调函数是否必须是 C 风格的函数?或者它可以是一种客观的 C 风格方法吗?
【发布时间】:2011-03-31 16:23:38
【问题描述】:

音频队列回调函数必须是 C 风格的函数吗?或者它可以是一个客观的 C 风格的方法?

【问题讨论】:

    标签: iphone objective-c c core-audio audioqueueservices


    【解决方案1】:

    完全依赖于 API;如果 API 调用一个函数、块或方法,那是你必须使用的。

    只要回调函数类型是这样的:

    void (*hollabackman)(AudioGunk*foo, void*context);
    

    设置回调的 API 类似于:

    setCallback(hollabackman func, void *context);
    

    那么你可以:

    - myMethod
    {
        setCallback(&myCallbackFunc, (void *)self);
    }
    
    - (void) hollaedBack: (AudioGunk*) aGunk
    {
    .....
    }
    

    然后:

    void myCallbackFunc(AudioGunk *foo, void *context)
    {
        MyClass *self = (MyClass *) context;
        [self hollaedBack: foo];
    }
    

    我建议您在设置回调时使用retainself,并仅在您拆除回调时使用release 平衡它。

    【讨论】:

      【解决方案2】:

      CoreAudio(包括 AudioQueueServices)没有 ObjectiveC 接口 - 纯 C 是直接与 CoreAudio 接口的答案。

      但是,您可以创建一些调用单例 ObjectiveC 对象方法的包装 C 函数。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-10-01
        • 2010-10-11
        • 2017-06-12
        • 1970-01-01
        • 1970-01-01
        • 2013-12-13
        • 2013-11-17
        • 2019-03-25
        相关资源
        最近更新 更多