aysncsocket在发起连接时必须在主线程中进行,,否则异步的委托返回将会出现无反应等现象。所以如果开启连接前若是在子线程中进行,则连接必须返回主线程performSelectorOnMainThread。
现在纠结如何将这个server移到线程中!?
问题早就解决了。答案就是RunLoop~
下面贴代码!仅供参考!具体问题具体分析!
- (void)initHttpServer { CFRunLoopSourceContext context = {0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL}; CFRunLoopSourceRef source = CFRunLoopSourceCreate(kCFAllocatorDefault, 0, &context); CFRunLoopAddSource(CFRunLoopGetCurrent(), source, kCFRunLoopDefaultMode); HTTPServer *httpServer = [HTTPServer getInstance]; [httpServer setType:@"_http._tcp."]; [httpServer setConnectionClass:[MyHTTPConnection class]]; NSError *error; if(![httpServer start:&error]) { NSLog(@"Error starting HTTP Server: %@", error); } BOOL runAlways = YES; // Introduced to cheat Static Analyzer while (runAlways) { NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; CFRunLoopRun(); [pool drain]; } // Should never be called, but anyway CFRunLoopRemoveSource(CFRunLoopGetCurrent(), source, kCFRunLoopDefaultMode); CFRelease(source); }然后用detachnewthread调一下这个函数就OK了!