[英]Converting CFSocket context to pointer
我將上下文設置為創建套接字的類的地址,如下所示:
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示例代碼,並看到了整個Internet上的示例。 為什么當我這樣做時它不起作用。 每當執行命中
PUFTransCont* obj = (__bridge PUFTransCont *)(info);
我得到一個EXC_BAD_ACCESS
您的代碼看起來PUFTransCont
,但是您必須確保PUFTransCont
對象不會被重新分配 ,只要它被回調函數使用即可。
一種可能的解決方案是在使用套接字時保持對對象的強烈引用(假設您使用ARC進行編譯)。
另一種可能的解決方案是將所有權轉讓給
CFSocketContext ctxt = {0, CFBridgingRetain(self), NULL, NULL, NULL};
(這會增加對象的保留計數),然后在不再需要該對象時將其釋放,例如在帶有
CFRelease(info);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.