2014-04-22 73 views
1

我有有雜誌和使用報刊亭框架報攤應用。我意識到當刪除雜誌和/或下載這些時,因爲當我訪問設置/使用我的應用程序保持下載和刪除同一本雜誌時,內存使用量增長有什麼不對勁。 發現問題...在委託方法下載的問題時:報刊亭內存存儲問題,我如何獲取應用程序緩存目錄?

-(void)connectionDidFinishDownloading:(NSURLConnection *)connection destinationURL:(NSURL *)destinationURL 

我只需要像這樣在最後添加的東西:

NSError *error; 
[[NSFileManager defaultManager] removeItemAtPath:[destinationURL path] error:&error]; 
if (error){ 
    NSLog(@"ERROR:%@", error); 
} 

即使目錄被稱爲「高速緩存」你需要手動刪除。好的問題解決了,但那些已經下載我的應用程序,並有大量的MB死在緩存目錄中的客戶呢?

我想知道如何獲得這個目錄,並在推出它刪除一切,只有一次 ... 我可以使用NSUserdefault做它只有一次,但我怎麼得到這個目錄,並刪除任何壓縮文件在它...這個目錄的例子,中的一個文件是:

/private/var/mobile/Applications/1291CC20-C55F-48F6-86B6-B0909F887C58/Library/Caches/bgdl-280-6e4e063c922d1f58.zip 

,但是這條道路與設備不同而不同。我希望在推出時這樣做,因此我確信沒有下載正在進行中,但歡迎提供任何其他解決方案,謝謝。你需要

回答

1

一切都是從枚舉緩存目錄下的所有文件,並刪除那些有zip擴展:

- (void)removeZipFilesFromCachesDirectory { 
    static NSString *const kZIPExtension = @"zip"; 

    NSFileManager *fileManager = [NSFileManager defaultManager]; 
    NSString *cachesDirectoryPath = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) objectAtIndex:0]; 

    NSError *error = nil; 
    NSArray *fileNames = [fileManager contentsOfDirectoryAtPath:cachesDirectoryPath error:&error]; 
    if (error == nil) { 
     for (NSString *fileName in fileNames) { 
      NSString *filePath = [cachesDirectoryPath stringByAppendingPathComponent:fileName]; 
      if ([filePath.pathExtension.lowercaseString isEqualToString:kZIPExtension]) { 
       NSError *anError = nil; 
       [fileManager removeItemAtPath:filePath error:&anError]; 
       if (anError != nil) { 
        NSLog(@"%@", anError); 
       } 
      } 
     } 
    } else { 
     NSLog(@"%@", error); 
    } 
} 
+0

很有前途。經過我測試它,如果它的作品你有你的報酬;) – user2387149

+0

THX兄弟,完美無瑕。我會盡快獎勵賞金。但我仍然有一個像100 MB的使用(設置/使用/ MYAPP)的調試時,所有的人<1MB我檢查了文件大小的緩存目錄。任何可能的想法?核心數據可能(我保存NSData的圖像)?但是,在一個全新安裝使用率在40 MB(在sqlite的相同數據) – user2387149

+0

@ user2387149你能在模擬器上運行的應用程序?在這種情況下,您可以看到所有與應用程序相關的目錄及其內容。也有可能是一些數據存儲做文檔目錄,但不僅僅是緩存。 –