簡體   English   中英

將CFSocket上下文轉換為指針

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM