如何从AcceptCallBack方法引用类?

时间:2013-02-26 05:49:10

标签: ios sockets asynchronous

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

1 个答案:

答案 0 :(得分:0)

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

具体来说,函数原型是:

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

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

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

CFSocketCreate中设置回调时。然后,当调用AcceptCallBack时,您想要的指针将被传递。你应该确保这个指针有效;如果你的self被释放,那么指针将无效。