我有一个服务器应用程序,它为每个连接的客户端创建一个对象。在此对象的init
方法中,我使用此代码创建一个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
在它失效后发送回调的任何想法?