#iphone #multithreading #thread-safety #asihttprequest
#iPhone #многопоточность #потокобезопасность #asihttprequest
Вопрос:
У меня есть этот метод:
-(void)updateSomething
{
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
NSURL *url = [NSURL URLWithString:@"some url"];
ASIFormDataRequest *httpRequest = [ASIFormDataRequest requestWithURL:url];
[httpRequest startSynchronous];
//some other stuff
[pool drain];
}
Я вызываю этот метод на applicationDidFinishLaunching
ЕСЛИ я вызываю его в основном потоке, он работает нормально
[self getMyItems];
Но когда я вызываю его в отдельном потоке, я получаю «Принятый программой сигнал: «EXC_BAD_ACCESS»»
[self performSelectorInBackground:@selector(getMyItems) withObject:nil];
Есть идеи, как решить эту проблему?
Ответ №1:
Зачем выполнять отдельные запросы в отдельных потоках, когда вы можете использовать ASINetworkQueue?
ASINetworkQueue *aQueue = [[ASINetworkQueue alloc] init];
[aQueue addOperation:requestToAdd];
[aQueue setDelegate:self];
[aQueue setRequestDidFinishSelector:@selector(requestFinished:)];
[aQueue setRequestDidFailSelector:@selector(requestFailed:)];
[aQueue setQueueDidFinishSelector:@selector(queueFinished:)];
[aQueue go];
ASINetworkQueue
является подклассом NSOperationQueue
, а запросы ASI * выполняются в отдельных потоках.