I am implementing an iOS App that needs to fetch a huge amount of images over HTTP. I've tried several approaches but independently what I do, Instuments shows constantly increasing memory allocations and the App crashes sooner or later when I run it on a device. There are no leaks shown by Instruments.

So far I have tried the following approches:

  • Fetch the images using a synchronous NSURLConnection within an NSOperation
  • Fetch the images using a asynchronous NSURLConnection within an NSOperation
  • Fetch the images using [NSData dataWithContentsOfURL:url] in the Main-Thread
  • Fetch the images using synchronous ASIHTTPRequest within an NSOperation
  • Fetch the images using asynchronous ASIHTTPRequest and adding it to a NSOperationQueue
  • Fetch the images using asynchronous ASIHTTPRequest and using a completionBlock

The Call Tree in Instrumetns shows that the memory is consumed while processing the HTTP-Response. In case of asynchronous NSURLConnection this is in

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {
[receivedData appendData:data];
}  

In case of the synchronous NSURLConnection, Instruments shows a growing CFData (store) entry. The problem with ASIHTTPRequest seems to be the same as with the asynchronous NSURLConnection in a analogous code-position. The [NSData dataWithContentsOfURL:url] approach shows an increasing amount of total memory allocation in exactely that statement.

I am using an NSAutoReleasePool when the request is done in a separate thread and I have tried to free up memory with [[NSURLCache sharedURLCache] removeAllCachedResponses] - no success.

Any ideas/hints to solve the problem? Thanks.

Edit: The behaviour only shows up if I persist the images using CoreData. Here is the code I run as a NSInvocationOperation:

-(void) _fetchAndSave:(NSString*) i
Edit
Report