【问题标题】:How to reference class from AcceptCallBack method?如何从 AcceptCallBack 方法中引用类?
【发布时间】:2013-02-26 05:49:09
【问题描述】:

我使用了 tutorial 中的 AcceptCallBack 方法,它允许我的应用程序从另一台计算机接收文件。当我尝试在 AcceptCallBack 方法中使用self 时,我收到以下错误“使用未声明的标识符'self'”,我想知道是否可以使用self 来调用类中的其他方法?

【问题讨论】:

    标签: ios sockets asynchronous


    【解决方案1】:

    AcceptCallBack 是一个 C 函数,不属于任何类,因此没有 self 指针。但是,有一种方法可以将 void* 传递给函数,它可以是您需要的任何东西;您可以通过这种方式将指针传递给您的self 对象。

    具体来说,函数原型是:

    void AcceptCallBack(
    CFSocketRef socket,
    CFSocketCallBackType type,
    CFDataRef address,
    const void *data,
    void *info)
    

    您可能希望info 指向您的对象。为此,您需要将 CFSocketContext 的 info 成员设置为您的 self 指针:

    struct CFSocketContext {
    CFIndex version;
    void *info;
    CFAllocatorRetainCallBack retain;
    CFAllocatorReleaseCallBack release;
    CFAllocatorCopyDescriptionCallBack copyDescription;
    };
    

    当您在CFSocketCreate 中设置回调时。那么当AcceptCallBack被调用时,你想要的指针就会被传递过去。由你来确保这个指针是有效的;如果你的self被释放,那么指针就会失效。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-02-26
      • 1970-01-01
      • 2013-12-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-15
      相关资源
      最近更新 更多