我有一个服务器应用程序为每个连接的客户端创建一个对象。在此对象的init
方法我用这个代码创建一个CFSocket
与客户沟通:如何阻止CFSocket发送回调?
CFSocketContext context = {
.info = self
};
socket = CFSocketCreateWithNative(kCFAllocatorDefault, nativeSocket, kCFSocketDataCallBack, SocketCallback, &context);
source = CFSocketCreateRunLoopSource(kCFAllocatorDefault, socket, 0);
CFRunLoopAddSource(CFRunLoopGetMain(), source, kCFRunLoopCommonModes);
当主程序与客户做了释放ClientConnection
对象和它的dealloc
方法被调用:
CFSocketDisableCallBacks(socket, kCFSocketDataCallBack);
CFRunLoopRemoveSource(CFRunLoopGetMain(), source, kCFRunLoopCommonModes);
CFRelease(source);
CFSocketInvalidate(socket);
CFRelease(socket);
之后,我仍然收到数据回调,这些数据回调会被路由到现在导致崩溃的解除分配的对象。
我试过了我能想到的一切,但我仍然无法完成这项工作。有关为什么CFSocket
在无效后发送回调的任何想法?
解决了这个问题。在没有意识到它的情况下,我从回调处理程序中调用release(以及dealloc)。原来,CFSocket不喜欢那样。 – Sven