예 를 들 어 iOS 개발 과정 에서 의 샌 드 박스 메커니즘 과 파일 을 상세 하 게 설명 합 니 다.

7954 단어 iOS
iOS 샌 드 박스 메커니즘
 iOS 응용 프로그램 은 이 프로그램 을 위 한 파일 시스템 에서 만 파일 을 읽 을 수 있 고 다른 곳 에 접근 할 수 없습니다.이 영역 은 샌 드 박스 가 되 기 때문에 모든 비 코드 파일 을 여기에 저장 해 야 합 니 다.예 를 들 어 이미지,아이콘,소리,이미지,속성 목록,본문 등 입 니 다.
모든 응용 프로그램 은 자신의 저장 공간 을 가지 고 있다응용 프로그램 은 자신의 담장 을 넘 어 다른 저장 공간 에 접근 할 수 없다.
시 뮬 레이 터 샌 드 박스 디 렉 터 리 열기
방법 1.숨겨 진 파일 을 표시 하고 Finder 에서 직접 열 수 있 습 니 다.숨겨 진 파일 을 보 는 방법 은 다음 과 같 습 니 다.터미널 을 열 고 이름 을 입력 하 십시오.

Mac 숨겨 진 파일 을 표시 하 는 명령:

defaults write com.apple.finder AppleShowAllFiles -bool true


隐藏Mac隐藏文件的命令:
defaults write com.apple.finder AppleShowAllFiles -bool false 
이제 자원 라 이브 러 리 폴 더 가 보 입 니 다.

자원 라 이브 러 리 를 열 고/application Support/iphone Simulator/폴 더 를 찾 습 니 다.이 안 은 시 뮬 레이 터 의 각 프로그램의 샌 드 박스 디 렉 터 리 입 니 다.

방법 2、이런 방법 이 더 편리 합 니 다.Finder 에서->이동  그리고"option"키 를 누 르 면"자원 라 이브 러 리"가 나타 납 니 다.
디 렉 터 리 구조
기본적으로 샌 드 박스 마다 3 개의 폴 더 가 있 습 니 다:Documents,Library,tmp.응용 샌 드 박스 메커니즘 때문에,응용 프로그램 은 몇 개의 디 렉 터 리 에서 만 파일 을 읽 고 쓸 수 있 습 니 다.
Documents:애플 은 프로그램 에서 만 들 거나 프로그램 에서 탐색 한 파일 데 이 터 를 이 디 렉 터 리 에 저장 하 는 것 을 권장 합 니 다.iTunes 백업 과 복구 시 이 디 렉 터 리 를 포함 합 니 다.
Library:프로그램의 기본 설정 이나 다른 상태 정 보 를 저장 합 니 다.
Library/caches:캐 시 파일 을 저장 합 니 다.iTunes 는 이 디 렉 터 리 를 백업 하지 않 습 니 다.이 디 렉 터 리 에서 파일 은 응용 프로그램 에서 삭제 하지 않 습 니 다.
tmp:임시 파일 을 즉시 만 드 는 곳 을 제공 합 니 다.
iTunes 는 아이 폰 과 동기 화 할 때 모든 Documents 와 Library 파일 을 백업 합 니 다.
아이 폰 은 재 부팅 시 tmp 파일 을 모두 버 립 니 다.
이것 은 위 에서 언급 한 세 개의 디 렉 터 리:Documents,Library,tmp

자주 사용 하 는 코드 예제 몇 개:
1.프로그램의 홈 디 렉 터 리 가 져 오기 

NSString *homeDirectory = NSHomeDirectory();   
NSLog(@"path:%@", homeDirectory);
  
 
2.document 디 렉 터 리 가 져 오기 

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);   
NSString *path = [paths objectAtIndex:0];   
NSLog(@"path:%@", path); 
  
 
3.Cache 디 렉 터 리 가 져 오기 

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);   
NSString *path = [paths objectAtIndex:0];   
NSLog(@"%@", path);   
 
4.라 이브 러 리 디 렉 터 리 가 져 오기 

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES);   
NSString *path = [paths objectAtIndex:0];   
NSLog(@"%@", path); 
 
 
5.Tmp 디 렉 터 리 가 져 오기 

NSString *tmpDir = NSTemporaryDirectory();   
 NSLog(@"%@", tmpDir);  
 
6.파일 쓰기 

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);   
    NSString *docDir = [paths objectAtIndex:0];   
    if (!docDir) {   
        NSLog(@"Documents ");           
    }   
    NSArray *array = [[NSArray alloc] initWithObjects:@" ",@"content",nil];   
    NSString *filePath = [docDir stringByAppendingPathComponent:@"testFile.txt"];   
    [array writeToFile:filePath atomically:YES]; 
 
7.파일 쓰기 

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);   
    NSString *docDir = [paths objectAtIndex:0];   
    NSString *filePath = [docDir stringByAppendingPathComponent:@"testFile.txt"];   
    NSArray *array = [[NSArray alloc]initWithContentsOfFile:filePath];   
    NSLog(@"%@", array); 
8.파일 이 존재 하 는 지 판단 하고 전체 경로 로 전송(fileExistsAtPath)

//  
NSFileManager * fileManager = [NSFileManager defaultManager]; 
 
NSString * documents = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)lastObject]; 
NSString * filePath = [documents stringByAppendingPathComponent:@"test"]; 
 
    // ,  
    if ([fileManager fileExistsAtPath:filePath]) { 
        NSLog(@"it is exit"); 
    } 
9.Documents 에 디 렉 터 리 만 들 기

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);   
   NSString *documentsDirectory = [paths objectAtIndex:0];   
   NSLog(@"documentsDirectory%@",documentsDirectory);   
   NSFileManager *fileManager = [NSFileManager defaultManager];   
   NSString *testDirectory = [documentsDirectory stringByAppendingPathComponent:@"test"];   
   //   
   [fileManager createDirectoryAtPath:testDirectory withIntermediateDirectories:YES attributes:nil error:nil];
10.디 렉 터 리 에 파일 만 들 기

NSString *testPath = [testDirectory stringByAppendingPathComponent:@"test00.txt"];   
NSString *testPath2 = [testDirectory stringByAppendingPathComponent:@"test22.txt"];   
NSString *testPath3 = [testDirectory stringByAppendingPathComponent:@"test33.txt"];   
 
 
NSString *string = @" ,write String"; 
[fileManager createFileAtPath:testPath contents:[string  dataUsingEncoding:NSUTF8StringEncoding] attributes:nil]; 
[fileManager createFileAtPath:testPath2 contents:[string  dataUsingEncoding:NSUTF8StringEncoding] attributes:nil]; 
[fileManager createFileAtPath:testPath3 contents:[string  dataUsingEncoding:NSUTF8StringEncoding] attributes:nil]; 
11.디 렉 터 리 열 에 있 는 모든 파일 이름 가 져 오기
두 가지 방법 으로 얻 을 수 있 습 니 다:subpaths OfDirectory AtPath 와 subpaths AtPath

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);   
NSString *documentsDirectory = [paths objectAtIndex:0];   
NSLog(@"documentsDirectory%@",documentsDirectory);   
NSFileManager *fileManage = [NSFileManager defaultManager];   
NSString *myDirectory = [documentsDirectory stringByAppendingPathComponent:@"test"];   
NSArray *file = [fileManage subpathsOfDirectoryAtPath: myDirectory error:nil];  
NSLog(@"%@",file);   
NSArray *files = [fileManage subpathsAtPath: myDirectory ];  
NSLog(@"%@",files); 
12.fileManager 는 현재 디 렉 터 리 를 조작 합 니 다.

//  
    NSFileManager *fileManager = [NSFileManager defaultManager]; 
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
    NSString *documentsDirectory = [paths objectAtIndex:0]; 
    //  
    [fileManager changeCurrentDirectoryPath:[documentsDirectory stringByExpandingTildeInPath]]; 
    // fileName ,contents , nil,attributes , nil 
    NSString * fileName = @"testFileNSFileManager.txt"; 
    NSArray *array = [[NSArray alloc] initWithObjects:@"hello world",@"hello world1", @"hello world2",nil]; 
    [fileManager createFileAtPath:fileName contents:array attributes:nil]; 
13.파일 삭제

[fileManager removeItemAtPath:fileName error:nil]; 

좋은 웹페이지 즐겨찾기