У меня есть серверное приложение, которое создает объект для каждого подключаемого клиента.В методе 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
отправляет обратные вызовы после того, как он был признан недействительным?