日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

iOS学习之沙盒

發(fā)布時(shí)間:2025/3/15 编程问答 56 豆豆
生活随笔 收集整理的這篇文章主要介紹了 iOS学习之沙盒 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

1iOS沙盒

?iOS應(yīng)用程序只能在為該改程序創(chuàng)建的文件系統(tǒng)中讀取文件,不可以去其它地方訪問,此區(qū)域被成為沙盒,所以所有的非代碼文件都要保存在此,例如圖像,圖標(biāo),聲音,映像,屬性列表,文本文件等。

?1.1、每個(gè)應(yīng)用程序都有自己的存儲(chǔ)空間
?1.2、應(yīng)用程序不能翻過自己的圍墻去訪問別的存儲(chǔ)空間的內(nèi)容
?1.3、應(yīng)用程序請求的數(shù)據(jù)都要通過權(quán)限檢測,假如不符合條件的話,不會(huì)被放行。

2、打開模擬器沙盒目錄

下面看看模擬器的沙盒文件夾在mac電腦上的什么位置。

文件都在個(gè)人用戶名文件夾下的一個(gè)隱藏文件夾里,中文叫資源庫,他的目錄其實(shí)是Library。

2.1 方法1可以設(shè)置顯示隱藏文件,然后在Finder下直接打開。設(shè)置查看隱藏文件的方法如下:打開終端,輸入命名

顯示Mac隱藏文件的命令:defaults write com.apple.finder AppleShowAllFiles -bool true

隱藏Mac隱藏文件的命令:defaults write com.apple.finder AppleShowAllFiles -bool false

輸完單擊Enter鍵,退出終端,重新啟動(dòng)Finder就可以了
重啟Finder:鼠標(biāo)單擊窗口左上角的蘋果標(biāo)志-->強(qiáng)制退出-->Finder-->

打開資源庫后找到/Application Support/iPhone Simulator/文件夾。這里面就是模擬器的各個(gè)程序的沙盒目錄

2.2 方法2這種方法更方便,在Finder上點(diǎn)->前往->前往文件夾,輸入/Users/username/Library/Application Support/iPhone Simulator/ ?前往。

username這里寫你的用戶名。

3、目錄結(jié)構(gòu)

  • 默認(rèn)情況下,每個(gè)沙盒含有3個(gè)文件夾:Documents, Library 和 tmp。因?yàn)閼?yīng)用的沙盒機(jī)制,應(yīng)用只能在幾個(gè)目錄下讀寫文件
    Documents:保存應(yīng)用運(yùn)行時(shí)生成的需要持久化的數(shù)據(jù),iTunes同步設(shè)備時(shí)會(huì)備份該目錄。例如,游戲應(yīng)用可將游戲存檔保存在該目錄
  • tmp:保存應(yīng)用運(yùn)行時(shí)所需的臨時(shí)數(shù)據(jù),使用完畢后再將相應(yīng)的文件從該目錄刪除。應(yīng)用沒有運(yùn)行時(shí),系統(tǒng)也可能會(huì)清除該目錄下的文件。iTunes同步設(shè)備時(shí)不會(huì)備份該目錄
  • Library/Caches:保存應(yīng)用運(yùn)行時(shí)生成的需要持久化的數(shù)據(jù),iTunes同步設(shè)備時(shí)不會(huì)備份該目錄。一般存儲(chǔ)體積大、不需要備份的非重要數(shù)據(jù)
  • Library/Preference:保存應(yīng)用的所有偏好設(shè)置,iOS的Settings(設(shè)置)應(yīng)用會(huì)在該目錄中查找應(yīng)用的設(shè)置信息。iTunes同步設(shè)備時(shí)會(huì)備份該目錄

二、獲取主要目錄路徑的方式

1、沙盒目錄

NSLog(@"%@",NSHomeDirectory());?

輸出結(jié)果:

/var/mobile/Applications/326640A7-6E27-4C63-BA5E-7391F203659A?

1.tmp

NSLog(@"%@",NSTemporaryDirectory());??

輸出結(jié)果:?

/private/var/mobile/Applications/326640A7-6E27-4C63-BA5E-7391F203659A/tmp/?

2.Myapp.app

NSLog(@"%@",[[NSBundle?mainBundle]?bundlePath]);??

輸出結(jié)果:

/var/mobile/Applications/326640A7-6E27-4C63-BA5E-7391F203659A/PhoneCall.app??

3.Documents

NSArray?*paths?=?NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,?NSUserDomainMask,?YES);??

NSString?*path?=?[paths?objectAtIndex:0];??

或者寫成: NSString?*path?=?[paths?lastObject];?

//documentDirectory只有一個(gè)元素所以取第一個(gè)元素根最后一個(gè)元素是一樣的。?

NSLog(@"%@",path);??

輸出結(jié)果:?

/var/mobile/Applications/326640A7-6E27-4C63-BA5E-7391F203659A/Documents??

?

:這里用到的NSSearchPathForDirectoriesInDomains方法需要解釋下,其聲明如下:?

FOUNDATION_EXPORT?NSArray?*NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory?directory,?NSSearchPathDomainMask?domainMask,?BOOL?expandTilde);??

該方法用于返回指定范圍內(nèi)的指定名稱的目錄的路徑集合。有三個(gè)參數(shù):

  • directory

NSSearchPathDirectory類型的enum值,表明我們要搜索的目錄名稱,比如這里用NSDocumentDirectory表明我們要搜索的是Documents目錄。如果我們將其換成NSCachesDirectory就表示我們搜索的是Library/Caches目錄。

  • domainMask

NSSearchPathDomainMask類型的enum值,指定搜索范圍,這里的NSUserDomainMask表示搜索的范圍限制于當(dāng)前應(yīng)用的沙盒目錄。還可以寫成NSLocalDomainMask(表示/Library)、NSNetworkDomainMask(表示/Network)等。

  • expandTilde

BOOL值,(YES: /User/userName. NO: ~)表示是否展開波浪線~。我們知道在iOS中~的全寫形式是/User/userName,該值為YES即表示寫成全寫形式,為NO就表示直接寫成“~” 。

三、NSFileManager的一些相關(guān)操作:
1)創(chuàng)建文件夾:
?NSString *myDirectory = [documentDirectory stringByAppendingPathComponent:@"test"];
???? BOOL ok = [fileManage createDirectoryAtPath:myDirectory withIntermediateDirectories:YES attributes:nil error:&error];
2)取得一個(gè)目錄下得所有文件名:(如上面的myDirectory)可用
NSArray *file = [fileManager subpathsOfDirectoryAtPath: myDirectory error:nil];


NSArray *files = [fileManager subpathsAtPath: myDirectory ];

NSArray *files=[fileManager? contentsOfDirectoryAtPath:documentDirectory error:&error];

3)讀取某個(gè)文件:
NSData *data = [fileManger contentsAtPath:myFilePath];//myFilePath是包含完整路徑的文件名
或直接用NSData 的類方法:
NSData *data = [NSData dataWithContentOfPath:myFilePath];


4)保存某個(gè)文件:
可以用 NSFileManager的
- (BOOL)createFileAtPath:(NSString *)path contents:(NSData *)data attributes:(NSDictionary *)attr;
或 NSData 的
- (BOOL)writeToFile:(NSString *)path atomically:(BOOL)useAuxiliaryFile;
- (BOOL)writeToFile:(NSString *)path options:(NSUInteger)writeOptionsMask error:(NSError **)errorPtr;

5)字符串寫入文件:
[str writeToFile:filePath atomically:YES encoding:NSUTF8StringEncoding error:&error];
[NSString stringWithContentsOfFile...];

6)移動(dòng)文件:
if ([fileMgr moveItemAtPath:filePath toPath:filePath2 error:&error] != YES)

7)刪除文件:
if ([fileMgr removeItemAtPath:filePath2 error:&error] != YES)

8)判斷是否是文件夾:
BOOL isDir = NO;
[fileManager fileExistsAtPath:path isDirectory:(&isDir)];
?if (isDir) { ...}

9)以下代碼用于獲取本機(jī)上的文件資源或圖片
獲取文本:
NSFileManager *fileManager=[NSFileManager defaultManager];
NSData *data=[fileManager contentsAtPath:@"/Developer/Documentation/wxWidgets/docs/lgpl.txt"];
NSString *string=[[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding];
NSLog(@"%@",string);
獲取圖片:
NSData *myData=[fileManager contentsAtPath:@"/Users/ruby/Desktop/Photo1.jpg"];
UIImage *myImage=[UIImage imageWithData:myData];

imageView.image=myImage;

?

轉(zhuǎn)載于:https://www.cnblogs.com/bzhong/p/5947167.html

總結(jié)

以上是生活随笔為你收集整理的iOS学习之沙盒的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。