나는 연결된 모든 클라이언트에 대해 객체를 만드는 서버 응용 프로그램을 가지고 있습니다. 이 객체의 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
이 무효화 된 후 콜백을 보내는 이유에 대한 아이디어가 있습니까?
이 문제를 해결했다. 실현하지 않고 콜백 핸들러 내부에서 릴리스 (및 따라서 dealloc)를 호출했습니다. CFSocket이 그런 것을 좋아하지 않는다는 것을 알았습니다. – Sven