2011-08-23 4 views

답변

46

짧은 :

Will iOS clear /Library/Caches for me when the app is updated 없음

은 아이폰 OS를 업데이트하는 동안 분명 모든 또는 Application_Home/Library/Caches의 일부를 수행 가능성이 없습니까?

or I need to clear it myself? 지울 내용을 지워야합니다.

두 가지 상황에 대비하십시오.

앱이 업데이트되었는지 어떻게 알 수 있습니까? iOS Application Update Test

롱 참조 : 응용 프로그램 업데이트시

파일을 저장 한 사용자가 응용 프로그램 업데이트를 다운로드, iTunes는 새 응용 프로그램 디렉토리에 업데이트를 설치합니다. 그런 다음 이전 설치 을 삭제하기 전에 사용자 데이터 파일을 이전 설치에서 새 응용 프로그램 디렉토리로 이동합니다.다른 사용자 디렉토리에있는 파일도 이상 이동 될 수 있지만 당신은

  • Application_Home/문서
  • Application_Home/라이브러리

: 다음 디렉토리에있는 파일은 업데이트 과정에서 보존 에 보장 은 업데이트 후에도 존재하지 않아야합니다. 애플의 문서에서

: The Application Runtime Environment - Backup and Restore

Application_Home/도서관/캐시 사용이 디렉토리는 응용 프로그램의 출시 또는간에 유지하려는 응용 프로그램 별 지원 파일을 작성하는 응용 프로그램 업데이트 중. 귀하의 응용 프로그램은 일반적으로 이러한 파일을 추가하고 제거하는 데 책임이 있습니다. 또한이 파일을 필요에 따라 다시 만들 수 있어야합니다 (iTunes는 장치를 완전히 복원하는 동안 해당 파일을 제거하기 때문에 ). iOS 2.2 이상에서는 iTunes가이 디렉토리의 내용을 에 백업하지 않습니다. 애플의 문서에서

: The Application Runtime Environment - The File System (daveoncode) 여기

그것이 "갱신"동안 캐시를 지우 않는 경우의 예 : 당신은 응용 프로그램 X의 V1.0을 설치합니다. 점심 식사를 한 번하고 다른 일을 시작하십시오. iOS가 오작동하여 복원해야합니다. 개발자는 V1.1을 출시합니다. Mac의 iTunes에서 응용 프로그램을 업데이트합니다. iTunes를 통해 장치를 복원합니다. iTunes가 V1.1을 설치합니다. 사용자가 앱을 실행합니다. 앱에서 그 일이 발생했음을 알리지 않지만 Application_Home/Library/Cache의 모든 파일이 사라졌습니다 (iTunes removes them during a full restoration of the device).

여기에 참으로 중요한 정보 : It should also be able to re-create these files as needed. Kendall은 캐시라고 지적 했으므로 언제든지 운영 체제에서 파일을 삭제할 수 있습니다. 따라서 Application_Home/Library/Caches에서 파일을로드 할 때마다 파일이 더 이상 존재하지 않는 경우를 고려해야합니다 (Kendall이 이에 대해 언급했습니다).

NSFileManager *fileManager = [NSFileManager defaultManager]; 
NSString *cachePath = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) objectAtIndex:0]; 
if(![fileManager fileExistsAtPath:[cachePath stringByAppendingPathComponent:@"myfile.zip"]]) { 
    //create it, copy it from app bundle, download it etc. 
} 
//start using it 
0

/캐시의 모든 점은 시스템이 언제든지 거기에 저장된 데이터를 지울 수 있다는 것입니다. 해당 디렉토리를 지우는 것에 대해 걱정할 필요가 없습니다.

+0

경우,이 문제 없어. 문제는 업데이트 후에 캐시가 지워지지 않으면 캐시 된 파일 중 일부가 변경되어 이전 파일이 계속 사용된다는 것입니다. – fbafelipe

+0

앱 버전 번호를 캐시 된 파일과 어떤 방식으로 연결하면 문제가되지 않습니다. –

9

안전하려면 스스로 지워야합니다. 그것이 당신에게 허가 될 것이라는 내용의 문서가없는 것처럼 보이므로, 지금도 그렇게해도 계속해서 그렇게 할 수는 없습니다.

+0

사실, daveoncode (아래)는 Apple의 설명서를 발견했습니다. 그러나 추천 자체는 여전히 훌륭합니다. – picciano

+0

@picciano : Apple이 앱 업그레이드시 캐시를 지울 수 있는지 여부에 대한 설명이 나와 있지 않습니다.단지 앱이 파일 관리에 "일반적으로"책임이 있으며, 파일이 실제로 제거되는 시간을 지정합니다. – Anomie

2

너에게 달렸어! 애플의 documentation에서 인용구 :

사용이 디렉토리는 응용 프로그램 또는 응용 프로그램 업데이트 중에 출시간에 유지하려는 응용 프로그램 별 지원 파일 를 작성합니다. 응용 프로그램에서 일반적으로 이러한 파일을 추가 및 제거하는 것은 입니다. 또한 장치를 완전히 복원하는 동안 iTunes가 제거하므로 필요에 따라 파일을 다시 만들 수 있어야합니다. iOS 2.2 이상에서는이 디렉토리의 내용이 iTunes에 의해 백업되지 않습니다.

3

iOS의 공간이 부족하면 캐시 디렉토리가 삭제됩니다. 사용자가 앱 스토어 옵션에서 '모두 업데이트'를 선택하면 공간이 부족할 수 있습니다.

파일을 앱에서 다시 만들 수있는 경우에만 캐시 디렉토리에 저장해야합니다. 내가 이해에서 iOS7에있는 미디어 플레이어는 캐시 디렉토리에 저장된 비디오를 재생하고, 여기에 내가 (단지의 경우) 수동으로 삭제 방법은 것입니다 : 시스템이 업데이트를하기 전에 캐시를 지우

-(void)deleteAllVideos 
{ 
    NSString *cachePath = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) objectAtIndex:0]; 


    NSFileManager* fileManager = [NSFileManager defaultManager]; 
    NSArray *directoryContent = [fileManager contentsOfDirectoryAtPath:cachePath error:NULL]; 

    NSError* error; 
    NSString* fullFilePath = nil; 

    for(NSString* fileName in directoryContent) 
    { 
     if([fileName hasSuffix:@".mp4"]) 
     { 

      fullFilePath = [cachePath stringByAppendingPathComponent:fileName]; 
      [fileManager removeItemAtPath:fullFilePath error:&error]; 

      if(error) 
      { 
       DLog(@"Error: %@",error); 
      } 
     } 
    } 

} 
+0

매우 간단하고 좋은 코드입니다. 캐시 디렉토리의 .zip 파일에 적용됩니다. – BlackSheep

관련 문제