gpt4 book ai didi

ios - 将 CFSocket 上下文转换为指针

转载 作者:塔克拉玛干 更新时间:2023-11-02 09:43:49 28 4
gpt4 key购买 nike

我将上下文设置为创建套接字的类的地址,如下所示:

CFSocketContext ctxt = {0, (__bridge void *)(self), NULL, NULL, NULL};

self.sock = CFSocketCreate(kCFAllocatorDefault, PF_INET, SOCK_STREAM, IPPROTO_TCP, kCFSocketDataCallBack|kCFSocketConnectCallBack, *(CFSocketCallBack)takeCallback, &ctxt);

然后在回调中我把这个:

static void takeCallback(CFSocketRef s, CFSocketCallBackType callbackType, CFDataRef address, const void *data, void *info)
{

PUFTransCont* obj = (__bridge PUFTransCont *)(info);

}

我看到了执行此操作的 Apple 示例代码,并在整个互联网上看到了执行此操作的示例。为什么我做的时候不起作用。每当执行命中时

PUFTransCont* obj = (__bridge PUFTransCont *)(info);

我得到一个 EXC_BAD_ACCESS

最佳答案

您的代码看起来不错,但您必须确保 PUFTransCont 对象未被释放只要被回调函数使用即可。

一个可能的解决方案是在套接字时保持对对象的强引用正在使用中(假设您使用 ARC 进行编译)。

另一种可能的解决方案是将所有权转移给

CFSocketContext ctxt = {0, CFBridgingRetain(self), NULL, NULL, NULL};

(增加对象的保留计数),并在以后释放它不再需要对象,例如在带有

的回调中
CFRelease(info);

关于ios - 将 CFSocket 上下文转换为指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22110915/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com