2012-10-25 4 views
1

서버에서 이미지를 다운로드하는 앱이 있습니다. 이미지는 약 56KB이고 최소 30 개가 있습니다. 사용자가 연결 또는 에지 연결 (전화 접속)을하지 못한 경우가 있습니다. 이처럼 내 AppDelegate.h에서 내가 NSURLCache을 사용하고NSURLCache 이미지 AFNetworking API 사용

:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 
    int cacheSizeMemory = 4*1024*1024; // 4MB 
    int cacheSizeDisk = 32*1024*1024; // 32MB 
    NSURLCache *sharedCache = [[[NSURLCache alloc] initWithMemoryCapacity:cacheSizeMemory diskCapacity:cacheSizeDisk diskPath:@"nsurlcache"] autorelease]; 
    [NSURLCache setSharedURLCache:sharedCache]; 

하지만 이미지를 캐시하지 않습니다 어떤 이유로

. 사용할 수있는 인터넷 연결로 모든 이미지를로드 한 다음 Edge 네트워크를 연결 해제하거나 사용하면 다시 이미지를 가져옵니다.

+0

문제를 해결할 수는 없지만 AFnetworking이 UIImageView에서 원격 이미지 (캐싱 포함)를로드하기가 정말 쉽다는 것을 알고 있습니까? http://engineering.gowalla.com/AFNetworking/Categories/UIImageView(AFNetworking).html –

+0

예! 나는 이미 그 범주를 사용하고 있지만 가장자리 네트워크 (그게 내가 hehe 무엇입니까) 그것은 천천히 슈퍼입니다. – azamsharp

+0

아마도 이미지로드/캐시 방법에 대한 자세한 내용 (코드)을 제공해야합니다. –

답변

1

: iOS 5 이상은 NSURLRequest의 NSURLRequestReturnCacheDataElseLoad cachePolicy를 사용하거나 적절한 Cache-Control 헤더를 반환하는 경우 디스크 캐싱을 지원합니다.

캐싱에 대한이 문제는 AFNetworking F.A.Q.에 설명되어 있습니다.

요약하면, 당신이 diskCapacity>0 (그것을 무시하는 것)과 NSURLCache을 만들 경우에도 그 iOS에서, NSURLCache는, 디스크 캐시 기능을 제공하지 않는 것, 그리고이 솔루션은 같은 NSURLCache의 다른 구현을 사용하는 것입니다 FAQ에 제안 된 SDURLCache.

+0

흥미 롭습니다. 감사합니다. –

+7

사실 iOS 5에서는 더 이상 사실이 아닙니다. NSURLCache를 사용하는 iOS 5는 실제로 캐시를 디스크에 저장합니다. 라이브러리 폴더에서 캐시 폴더와 내부 캐시가 있는지 확인할 수 있으며 캐시 이름을 찾을 수 있습니다. – azamsharp

+0

@azamsharp 네, 정확함에 감사드립니다.) _ (하지만 OP에 디스크 캐싱에 문제가 있다고 가정하면 어쩌면 그는 여전히 iOS4에서 해당 앱을 테스트하고있는 것입니까?) _ – AliSoftware

0

NSURLCache에 대한 각 요청에 대해 캐시 제어 헤더를 다시 사용하도록 서버에 액세스해야합니다. 내 시나리오에서와 같이 설정을 가져 오지 못하거나 얻을 수 없다면 SDURLCache 또는 RNCachingURLProtocol과 같은 것을 사용하거나 자체 캐싱 계층을 롤업해야합니다.