В моем приложении я открываю сервер по WiFi для обмена файлами и загрузки файлов из веб-браузера в приложение.
У меня проблема в том, что он работает в основном потоке (потоке пользовательского интерфейса) и создает много проблем, есть способ заставить этот код работать в фоновом режиме?
Это код:
Я делаю поток чтения неблокирующим с помощью этого метода:
if (!CFReadStreamSetClient (theReadStream,
kCFStreamEventHasBytesAvailable | kCFStreamEventErrorOccurred | kCFStreamEventEndEncountered | kCFStreamEventOpenCompleted,
(CFReadStreamClientCallBack)&MyCFReadStreamCallback,
(CFStreamClientContext *)(&theContext) ))
{
NSError *err = [self getStreamError];
NSLog (@"AsyncSocket %p couldn't attach read stream to run-loop,", self);
NSLog (@"Error: %@", err);
if (errPtr) *errPtr = err;
return NO;
}
и он вызывает этот метод:
static void MyCFReadStreamCallback (CFReadStreamRef stream, CFStreamEventType type, void *pInfo)
{
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
AsyncSocket *socket = [[(AsyncSocket *)pInfo retain] autorelease];
[socket doCFReadStreamCallback:type forStream:stream];
[pool release];
}
это исходный код, который я использую:
http://code.google.com/p/cocoaasyncsocket/