使用此代码时,如何清除缓存数据和其他内存? 模拟器上的CFData(商店)不断增长....
-(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:@"PDF2.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];
}
答案 0 :(得分:1)
我最近遇到了类似的问题。
本质上,dataWithContentsOfURL正在使用NSURLConnection,它会缓存响应。
我会推荐几件事:
自己使用NSURLConnection获取数据而不是dataWithContentsOfURL。
使用异步NSURLConnection API和委托方法(很少需要同步方法)。
在下面实现NSURLConnection委托方法并在其中返回nil:
- (NSCachedURLResponse *)connection:(NSURLConnection *)connection willCacheResponse:(NSCachedURLResponse *)cachedResponse
{
return nil;
}
这可确保不缓存响应。
NSURLConnection文档:http://developer.apple.com/library/ios/#documentation/Cocoa/Reference/Foundation/Classes/NSURLConnection_Class/Reference/Reference.html
使用NSURLConnection: http://developer.apple.com/library/ios/#documentation/Cocoa/Conceptual/URLLoadingSystem/Tasks/UsingNSURLConnection.html
答案 1 :(得分:0)
使用此代码。
我对dataWithContentsOfURL有同样的问题。尝试添加@autorealse:
@autoreleasepool {
NSError *error = nil;
NSData *data=[[NSData alloc] init];
data = [NSData dataWithContentsOfURL:url options:NSDataReadingUncached error:&error];
img = [UIImage imageWithData:data];
}
答案 2 :(得分:-3)
您需要发布变量:数据,路径和 pdfPath 。以下电话:
[NSData dataWithContentsOfURL:url]
NSSearchPathForDirectoriesInDomains
[documentsDirectory stringByAppendingPathComponent:@"DPR2.pdf"]
所有返回拥有的对象,您需要释放以避免内存泄漏。你没有亲自调用init,但是他们的内部实现代表你分配内存,然后保留这个内存(这就是你可以使用这些变量而不用担心出现分段错误的原因)。即使您的变量在方法返回时超出范围,它们分配的内存也会被保留,因为您没有通过 减少其引用计数释放 即可。我之前会显示大致修改过的代码:
-(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中管理动态分配的变量。