Асинхронный запрос к серверу из фонового потока

у меня возникла проблема, когда я пытался делать асинхронные запросы к серверу из фонового потока. Я'Мы никогда не получали результаты этих запросов. Простой пример, который показывает проблему:

@protocol AsyncImgRequestDelegate
-(void) imageDownloadDidFinish:(UIImage*) img;
@end


@interface AsyncImgRequest : NSObject
{
 NSMutableData* receivedData;
 id delegate;
}

@property (nonatomic,retain) id delegate;

-(void) downloadImage:(NSString*) url ;

@end



@implementation AsyncImgRequest
-(void) downloadImage:(NSString*) url 
{  
 NSURLRequest *theRequest=[NSURLRequest requestWithURL:[NSURL URLWithString:url]
             cachePolicy:NSURLRequestUseProtocolCachePolicy
            timeoutInterval:20.0];
 NSURLConnection *theConnection=[[NSURLConnection alloc] initWithRequest:theRequest delegate:self];
 if (theConnection) {
  receivedData=[[NSMutableData data] retain];
 } else {
 }  

}

- (void)connectionDidFinishLoading:(NSURLConnection *)connection
{
  [delegate imageDownloadDidFinish:[UIImage imageWithData:receivedData]];
  [connection release];
  [receivedData release];
}
@end

Тогда я называю это из основного потока

asyncImgRequest = [[AsyncImgRequest alloc] init];
asyncImgRequest.delegate = self; 
[self performSelectorInBackground:@selector(downloadImage) withObject:nil];

Метод downloadImage указан ниже:

-(void) downloadImage
{
 NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
 [asyncImgRequest downloadImage:@"http://photography.nationalgeographic.com/staticfiles/NGS/Shared/StaticFiles/Photography/Images/POD/l/leopard-namibia-sw.jpg"];
 [pool release];
}

Проблема в том, что метод imageDownloadDidFinish никогда не вызывается. Причем ни один из методов

- (void)connectionDidFinishLoading:(NSURLConnection *)connection
- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error
- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse*)response

называются. Однако, если я заменю

 [self performSelectorInBackground:@selector(downloadImage) withObject:nil]; 

от

 [self performSelector:@selector(downloadImage) withObject:nil]; 

все работает правильно. Я предполагаю, что фоновый поток умирает, прежде чем асинхронный запрос завершает свою работу, и это вызывает проблему, но яЯ не уверен. Я прав с этим предположением? Есть ли способ избежать этой проблемы?

Я знаю, что могу использовать запрос синхронизации, чтобы избежать этой проблемы, ноПросто простой пример, реальная ситуация сложнее.

Заранее спасибо.

Ответы на вопрос(3)

Ваш ответ на вопрос