Вам необходимо освободить переменные: data , paths и pdfPath . Следующие звонки:
[NSData dataWithContentsOfURL:url]
NSSearchPathForDirectoriesInDomains
[documentsDirectory stringByAppendingPathComponent:@"DPR2.pdf"]
все возвращаемые собственные объекты, которые необходимо освободить, чтобы избежать утечек памяти. Вы сами не вызывали init для них, но их внутренние реализации выделяли память от вашего имени, а затем оставляли эту память (поэтому вы можете использовать эти переменные, не беспокоясь о сбое сегментации). Даже если ваши переменные выходят из области видимости, когда метод возвращается, выделенная ими память сохраняется, потому что вы не уменьшили ее счетчик ссылок с помощью release . Я показываю примерно измененный код, прежде чем он должен работать:
-(void)downloadFile:(NSURL *)theURL
{
NSLog(@"dowbload this url : %@",theURL);
NSURL *url = theURL;
NSData *data = [NSData dataWithContentsOfURL:url];
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *pdfPath = [documentsDirectory stringByAppendingPathComponent:@"DPR2.pdf"];
[data writeToFile:pdfPath atomically:YES];
[self showThePDF];
NSURLCache *sharedCache = [[NSURLCache alloc] initWithMemoryCapacity:0 diskCapacity:0 diskPath:nil];
[NSURLCache setSharedURLCache:sharedCache];
[sharedCache removeAllCachedResponses];
[sharedCache release];
[pdfPath release];
[paths release];
[data release];
}
При желании вы можете управлять динамически размещенными переменными в NSAutoReleasePool .