iPhone — является ли ASIHTTPRequest потокобезопасным?

#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 * выполняются в отдельных потоках.