iOSはサンドボックスディレクトリといくつかのボックスディレクトリの概要にUIImageを保存します

碑文
-ビットとピースの蓄積から始めて、地平線上で剣を保持し、どこへ行っても完璧を目指します。

この記事の概要
1. UIImageをサンドボックスドキュメントディレクトリに保存し、ドキュメントに保存された画像を読み取る方法
2.サンドボックスメカニズムの概要と各ディレクトリの説明、および取得
方法の概要3. NSSearchPathForDirectoriesInDomains関数メソッドの概要

ここに画像の説明を挿入


1 UIImageをサンドボックスディレクトリに保存します

- (void)saveImage:(UIImage *)image {
    
    
//获取 Document 目录路径
NSArray *paths =NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES);
    
// 构造保存文件的名称 保存成功会返回YES
NSString *filePath = [[paths objectAtIndex:0]stringByAppendingPathComponent:
                          [NSString stringWithFormat:@"test.png"]]; 
//保存操作
BOOL result =[UIImagePNGRepresentation(image)writeToFile:filePath   atomically:YES]; 
    if (result == YES) {
    
    
        NSLog(@"保存成功");
    }else{
    
    
    NSLog(@"保存失败");
}
    
}

2保存した画像を取得する

- (void)getImage {
    
    
 
 NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask, YES);
 
 NSString *filePath = [[paths objectAtIndex:0]stringByAppendingPathComponent:
                       [NSString stringWithFormat:@"demo.png"]];
 // 保存文件的名称
 UIImage *img = [UIImage imageWithContentsOfFile:filePath];
 NSLog(@"=== %@", img);
    
}

3サンドボックスメカニズムの概要

各iOSプログラムはそれぞれ独立したファイルシステム(ストレージスペース)を持ち、対応するファイルシステムでのみ操作可能であり、この領域をアプリケーションのサンドボックスと呼びます。サンドボックスメカニズムはセキュリティシステムであると言えます。

アプリケーションは独自のサンドボックス内にとどまる必要があり、他のアプリケーションはサンドボックスにアクセスできません。プロパティファイル、plist、テキストファイル、画像、アイコン、メディアリソースなど、すべての非コードファイルをここに保存する必要があります。サンドボックスはバッファの保存に使用され、APPは閉じられ、バッファは自動的にクリーンアップされます。

3.1サンドボックスのディレクトリ構造

次の図は、Appleによって正式に提供されたサンドボックスディレクトリ構造を示しています
ここに画像の説明を挿入

3.1.1ドキュメント

(1)上の図で、SandboxはMyAppのサンドボックスディレクトリスペースです。たとえば、MAC OSでMyApp.appを右クリックして、パッケージディレクトリを表示します。

(2)/ Documents /アプリケーションの重要なデータファイルとユーザーデータファイルを保存します。ユーザーデータは基本的にこの場所に配置されます(たとえば、インターネットからダウンロードした画像や音楽ファイル)。アプリケーションが更新されると、フォルダーが自動的にバックアップされ、iTunesに接続すると、フォルダー内のデータも自動的に同期されます。

3.1.2 / Libraryディレクトリ

/ Libraryディレクトリは、バックアップしたいがユーザーには表示されないようにするデータを格納するために使用できます。このパスの下にあるすべてのフォルダー(キャッシュを除く)は、iTunesによってバックアップされます。

  • / Library / Caches(Caches)
    は、アプリケーションの使用時に生成されたサポートファイルとキャッシュファイルを保存し(アプリケーションの再起動プロセスで必要な情報を保存)、ログファイルはこのディレクトリに配置するのが最適です。このディレクトリはiTunesの同期中にバックアップされず、その中のデータは他のツールによってクリーンアップされる可能性があります。

  • / Library / Preferences(Preferences)アプリケーション設定ファイル(NSUserDefaults(これを配置するため)を使用するときに作成される)タイプの設定を保存します。手動で作成しないでください。iTunesをバックアップすることもできます。アプリケーションが更新されると自動的にバックアップされます。plistファイルはここに置いてください)。

3.1.3 / tmp /ディレクトリ

/ tmp /アプリケーションの実行中に必要な一時データを保存します。このパスのファイルはiTunesによってバックアップされません。iPhoneが再起動すると、このディレクトリ内のすべてのファイルが自動的に削除されます。たとえば、ビデオを記録した後、/ temp /に配置されます。したがって、ビデオファイルはこのフォルダーからアルバムに転送する必要があります。そうしないと、システムによってビデオファイルがクリーンアップされます。

3.2サンドボックスカタログコードメソッドを取得する

// 获取沙盒根目录路径
NSString*homeDir = NSHomeDirectory();

// 获取Documents目录路径
NSString*docDir = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES) firstObject];

//获取Library的目录路径
NSString*libDir = [NSSearchPathForDirectoriesInDomains(NSLibraryDirectory,NSUserDomainMask,YES) lastObject];

// 获取cache目录路径
NSString*cachesDir = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory,NSUserDomainMask,YES) firstObject];

// 获取tmp目录路径
NSString*tmpDir =NSTemporaryDirectory();

// 获取应用程序程序包中资源文件路径的方法:
NSLog(@"%@",[[NSBundlemainBundle] bundlePath]);
NSString*imagePath = [[NSBundlemainBundle] pathForResource:@"apple"ofType:@"png"];
UIImage*appleImage = [[UIImagealloc] initWithContentsOfFile:imagePath];

4 NSSearchPathForDirectoriesInDomains

NSSearchPathForDirectoriesInDomainsメソッドは、ディレクトリを検索するために使用され、指定された範囲内の指定された名前を持つディレクトリのパスコレクションを返します

4.1パラメータ1

directoryNSSearchPathDirectoryタイプの列挙値は、検索するディレクトリの名前を示します。たとえば、ここではNSDocumentDirectoryを使用して、Documentsディレクトリを検索していることを示しています。

NSCachesDirectoryに変更すると、Library / Cachesディレクトリを検索していることになります

4.2パラメータ2

domainMaskNSSearchPathDomainMaskタイプの列挙値は検索範囲を指定します。ここでのNSUserDomainMaskは、検索範囲が現在のアプリケーションのサンドボックスディレクトリに制限されることを意味します。

NSLocalDomainMask(/ Libraryを表す)、NSNetworkDomainMask(/ Networkを表す)などのように書くこともできます。

4.3パラメータ3

expandTildeBOOL値は、波線を拡大するかどうかを示します。iOSの完全な書き込み形式は/ User / userNameで、値はYESです。これは、完全な書き込み形式で書き込まれることを意味し、NOは、「〜」として直接書き込まれることを意味します。


ここに画像の説明を挿入

おすすめ

転載: blog.csdn.net/zl18603543572/article/details/108543991