iOS-沙盒機制-整合篇
前言:突然想學習一下,沙盒,看了那麼多部落格,我四處的蒐集一下總結一下,為了以後方便學習,留存一篇整合的文章。
一、沙盒機制
1.簡介:
--概念:每個iOS應用都有自己的應用沙盒,應用沙盒就是檔案系統目錄。 --核心:sandbox對應用程式執行各種操作的許可權限制 --特點: 1.每個應用程式的活動範圍都限定在自己的沙盒裡 2.不能隨意跨越自己的沙盒去訪問別的應用程式沙盒中的內容 (iOS8已經部分開放訪問extension) 3.
在訪問別人沙盒內的資料時需要訪問許可權。 --概括: 1.是一種安全體系的表現 2.總體來說沙盒就是一種獨立、安全、封閉的空間。 3.非程式碼檔案都要儲存在此,例如影象,圖示,聲音,映像,屬性列表,文字檔案等。 --*注意: APP之間不能相互通,唯獨可以通過URL Scheme可以通訊2.如何檢視沙盒?
1).前往資料夾開啟2).通過finder逐步查詢
直接在Finder->前往->前往資料夾(或者點選桌面空白處command+shift+g), 輸入上面的內容即可。記住將XXXXX換成你的電腦使用者名稱。 /Users/XXXXX/Library/Developer/CoreSimulator/
通過finder逐步查詢2.沙盒裡邊有什麼?作用是什麼?
--沙盒內部:
Paste_Image.png
--內部檔案作用:
-- Documents:儲存應用執行時生成的需要持久化的資料,iTunes會自動備份該目錄。 蘋果建議將在應用程式中瀏覽到的檔案資料儲存在該目錄下。 -- Library: Caches: 一般儲存的是快取檔案,例如圖片視訊等,此目錄下的檔案不會再應用程式退出時刪除。 *在手機備份的時候,iTunes不會備份該目錄。 例如音訊,視訊等檔案存放其中 Preferences: 儲存應用程式的所有偏好設定iOS的Settings(設定),我們不應該直接在這裡建立檔案, 而是需要通過NSUserDefault這個類來訪問應用程式的偏好設定。 *iTunes會自動備份該檔案目錄下的內容。 比如說:是否允許訪問圖片,是否允許訪問地理位置...... -- tmp:臨時檔案目錄,在程式重新執行的時候,和開機的時候,會清空tmp資料夾。
2.通過程式碼獲取沙盒路徑
1).獲取沙盒的Home目錄2).獲取沙盒的Documents目錄
//獲取根目錄 NSString *homePath = NSHomeDirectory(); NSLog(@"Home目錄:%@",homePath);
3).獲取Library檔案路徑
/* 獲取Documents資料夾目錄, @param NSDocumentDirectory 獲取Document目錄 @param NSUserDomainMask 是在當前沙盒範圍內查詢 @param YES 展開路徑,NO是不展開 @return test.txt檔案的路徑 */ NSString *filePath =[[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask,YES)firstObject]stringByAppendingPathComponent:@"test.txt"];
4).獲取Library/Caches檔案目錄
/** * 獲取Library目錄下檔案路徑 * * @param NSLibraryDirectory 獲取Library目錄 * @param NSUserDomainMask 在當前的沙盒範圍內查詢 * @param YES 展開路徑,NO不展開路徑 * * @return test.txt檔案的路徑 */ NSString *filePath = [[NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES)firstObject]stringByAppendingPathComponent:@"test.txt"];
5).獲取Library/Preferences檔案目錄
/** * 獲取Library目錄下檔案路徑 * * @param NSCachesDirectory 獲取Library/Caches目錄 * @param NSUserDomainMask 在當前的沙盒範圍內查詢 * @param YES 展開路徑,NO不展開路徑 * * @return test.txt檔案的路徑 */NSString *filePath = [[NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES)firstObject]stringByAppendingPathComponent:@"test.txt"];
Preferences由系統維護,不需要我們手動的獲取檔案路徑進行操作,而是需要藉助NSUserDefault來操作,但是我們是可以獲取到這個檔案的。6).獲取tmp檔案路徑
/** * 獲取Library目錄下檔案路徑 * * @param NSLibraryDirectory 獲取Library目錄 * @param NSUserDomainMask 在當前的沙盒範圍內查詢 * @param YES 展開路徑,NO不展開路徑 * * @return test.txt檔案的路徑 */ NSString *filePath = [[NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES)firstObject]stringByAppendingPathComponent:@"Preferences"];
7).向沙盒中寫入檔案
/** * 獲取tmp檔案目錄下的檔案路徑 * * @return test.txt的檔案路徑 */ NSString *filePath = [NSTemporaryDirectory()stringByAppendingPathComponent:@"test.txt"]
8).向沙盒中讀取檔案
//向沙盒中寫入檔案 NSString *documentsPathW = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask, YES)[0]; //寫入檔案 if (!documentsPathW) { NSLog(@"目錄未找到"); }else { NSString *filePaht = [documentsPath stringByAppendingPathComponent:@"test.txt"]; NSArray *array = [NSArray arrayWithObjects:@"code",@"change", @"world", @"OK", @"", @"是的", nil]; [array writeToFile:filePaht atomically:YES];}
//從沙盒中讀取檔案 NSString *documentsPathR = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask, YES)[0]; NSString *readPath = [documentsPathR stringByAppendingPathComponent:@"test.txt"]; NSArray *fileContent = [[NSArray alloc] initWithContentsOfFile:readPath]; NSLog(@"檔案內容:%@",fileContent);
3.程式碼獲取應用程式包的目錄與內容
1).獲取應用程式包的路徑2).獲取程式包中一個圖片資源路徑的方法(apple.png)
NSString *imagePath = [NSBundle mainBundle].resourcePath; -- 程式包檔案,包含了資原始檔和可執行檔案AppName.app
3).將NSData型別的資料儲存到本地(以圖片為例)
NSString *imagePath = [[NSBundle mainBundle]pathForResource:@"apple" ofType:@"png"]; 注意: 1.imageWithname這種載入的方式是有快取的,第二次在載入時直接從記憶體中取出圖片, 這樣的話效率更高,但是會使得記憶體變得越來越大,通常使用在,圖片記憶體較小, 而且需要頻繁使用的地方。 2.NSBundle mainBundle 是通過獲取圖片的全路徑來載入圖片的, 不會有快取,但是這樣每次就得重新載入,它也不會是在不是在使用完圖片後就釋放, 而是在下一次使用圖片的時候才會釋放,所以需要我們在使用完圖片後,手動來釋放記憶體。
常用兩種初始化image的方式:
1:使用imageNamed: 第一次讀取的時候,會先把這個圖片放到快取當中,下次在使用到這個同名的圖片時,直接從快取中讀取. 優點: 方便快捷,只有第一次使用的時候稍慢,接下來在使用就會快些. 缺點: 如果在當前工程中大量會大量的浪費記憶體空間 UIImage *image = [UIImage imageNamed:@"[email protected]"]; //這種初始化方法可以直接不給出圖片的具體名字,它會自動匹配 2:使用initWithContentsOfFile: 初始化圖片時,每次都會根據路徑去讀取,不會佔用記憶體,如果圖片在當前工程中只使用一次,應該選擇這個方法.
程式碼展示:
#pragma mark --- 將NSData型別的資料儲存到本地(以圖片為例) //這種必須拼接圖片的全名稱,否則image路徑為空 NSString *filePath = [[NSBundle mainBundle] pathForResource:@"[email protected]" ofType:nil]; UIImage *image = [[UIImage alloc] initWithContentsOfFile:filePath]; - //將image型別的物件轉換成為NSData型別資料進行儲存 //使用UIImageJPEGRepresentation:將圖片轉換成為NSData型別 //第一個引數:要轉換的image物件 //第二個引數:表示圖片壓縮的值 //IPhone中將大於2M的圖片,使用該方法,最終會將圖片儲存成jpeg格式 NSData *imageData = UIImageJPEGRepresentation(image, 1); //找到路徑儲存 NSString *documentPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject]; //最終路徑 NSString *imagePath = [documentPath stringByAppendingString:@"/1234.jpeg"]; - [imageData writeToFile:imagePath atomically:YES]; - NSLog(@"imagePath = %@",imagePath); - //讀取NSData型別的資料 //需求:將NSData型別的資料讀取出來,轉換成為UIImage型別並且顯示在imageView上 NSData *newData = [NSData dataWithContentsOfFile:imagePath]; UIImage *showImage = [[UIImage alloc] initWithData:newData]; UIImageView *showImageView = [[UIImageView alloc] initWithImage:showImage]; [self.view addSubview:showImageView];
- 擴充套件學習網站:
總結的稍微有點亂,不足的請多提意見,在補充(^__^)
1.剛剛線上:http://www.superqq.com/blog/2015/07/14/xcode6-dot-4zhu-ce-url-schemebu-zou-xiang-jie/)%E3%80%82
相關推薦
iOS-沙盒機制-整合篇
前言:突然想學習一下,沙盒,看了那麼多部落格,我四處的蒐集一下總結一下,為了以後方便學習,留存一篇整合的文章。 一、沙盒機制 1.簡介: --概念:每個iOS應用都有自己的應用沙
iOS 沙盒機制及檔案操作
沙盒機制簡介 iOS應用程式只能在為該程式建立的檔案目錄下進行檔案的讀寫操作,不可以去其它地方訪問,此檔案區域被成為沙盒。 每個iOS應用都有自己的應用沙盒,應用沙盒就是檔案系統目錄,沙盒對應用程式執行各種操作的規定了區域範圍的許可權限制。 特點:
【理解】 iOS沙盒(sandbox)機制(一)
IOS應用程式只能在為該改程式建立的檔案系統中讀取檔案,不可以去其它地方訪問,此區域被成為沙盒,所以所有的非程式碼檔案都要儲存在此,例如影象,圖示,聲音,映像,屬性列表,文字檔案等。 1.1、每個應用程式都有自己的儲存空間 1.2、應用程式不能翻過自己的圍牆去訪問別的儲存空間的內容 1.3、應用
【iOS知識學習】_iOS沙盒機制
IOS中的沙盒機制(SandBox)是一種安全體系,它規定了應用程式只能在為該應用建立的資料夾內讀取檔案,不可以訪問其他地方的內容。所有的非程式碼檔案都儲存在這個地方,比如圖片、聲音、屬性列表和文字檔案等。 1.每個應用程式都在自己的沙盒內 2.不能隨意跨越自己的沙盒去訪問
iOS學習之iOS沙盒(sandbox)機制和檔案操作(一)
1、iOS沙盒機制 iOS應用程式只能在為該改程式建立的檔案系統中讀取檔案,不可以去其它地方訪問,此區域被成為沙盒,所以所有的非程式碼檔案都要儲存在此,例如影象,圖示,聲音,映像,屬性列表,文字檔案等。 1.1、每個應用程式都有自己的儲存空間 1.2、應用程式不
iOS沙盒目錄
jpg tin 信息 程序啟動 word cache intro 文件格式 temp 出於安全考慮,iOS系統的沙盒機制規定每個應用都只能訪問當前沙盒目錄下面的文件(也有例外,比如系統通訊錄能在用戶授權的情況下被第三方應用訪問),這個規則把iOS系統的封閉性展現的淋漓盡致。
iOS沙盒文件夾及獲取路勁方法
雜誌 str doc contents 緩存 ask type domain sea iPhone沙盒中有四個文件夾,分別是:documents、tmp、app、library. 1、Documents :用戶生成的文檔或數據,或者應用不能重新新創建的數據,存儲在/Docu
ios沙盒測試無法連線到Appstore
ios沙盒測試無法連線到Appstore 沙盒測試的時候一直報以下錯誤: 2018-10-15 21:56:57.823099+0800 iOS[5989:1703401] 讀取本地蘋果訂單 -- 2018-10-15 21:56:58.992553+08
iOS 沙盒儲存
NSString*str=[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject]; NSString*path=[str stringByAppendin
ios沙盒檔案操作
獲取沙盒目錄 //獲取沙盒目錄 - (NSString *)getHomePath{ NSString *homePath =NSHomeDirectory(); return homePath; } //獲取Document目錄 - (NSString *)getDocum
iOS沙盒目錄中Documents, Library, tmp的作用和區別
1.Documents: 只有使用者生成的檔案、其他資料及其他程式不能重新建立的檔案,應該儲存在<Application_Home>/Documents目錄下面,並將通過iCloud自動備份。 2.Library 可以重新下載或者重新生成的資料應該儲存在<
iOS-沙盒目錄結構分析
iOS應用程式為自己建立的一個獨立、封閉、安全的檔案系統目錄. 特點: 1)不可能兩個程式共用一個沙盒 2)每一個應用程式的沙盒,只有它自己才能使用 3)沙盒裡邊每個資料夾都有自己特有的刪除渠道.只要自己手動不刪除,檔案永遠存在 沙盒預設情況下有三個目
打開沙盒文件iOS
class sim .com nta 進行 教程 ice nshome nload 有時使用數據庫是需要查看或者更換沙盒裏的數據庫等文件 那麽如何拿到真機的沙盒 查看真機沙盒教程 打開Devices 在xcode的上部導航欄裏,選擇window -> Devi
開啟沙盒檔案iOS
有時使用資料庫是需要檢視或者更換沙盒裡的資料庫等檔案 那麼如何拿到真機的沙盒 檢視真機沙盒教程 開啟Devices 在xcode的上部導航欄裡,選擇window -> Devices and Simulators ---------------------
iOS 獲取模擬器上的沙盒路徑
在工程裡寫上如下程式碼,打印出來 NSString *caches = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject];
iOS 通過iTunes共享檔案獲取手機沙盒Document目錄
iOS 系統提供了檔案共享支援 當手機通過資料線連線到 Mac 的 iTunes 時, 可以在 iTunes 將電腦上的檔案傳輸到 App 的沙盒目錄當中. 為 App 新增離線資料. 也可以將 App 沙盒目錄下儲存的檔案通過 iTunes 匯出到電腦當中. 使用方式: 其實開發當中需
iOS開發 - 獲取真機沙盒資料
分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!  
Unity IOS讀取沙盒路徑圖片
//儲存圖片 -(void)saveImageDocuments:(UIImage *)image{ //拿到圖片 UIImage *imagesave = image; NSString *path_sandox = NSHomeDirector
【iOS開發必收藏】詳解iOS應用程式內使用IAP/StoreKit付費、沙盒(SandBox)測試、建立測試賬號流程!【2012-12-11日更新獲取"產品付費數量等於0的問題"】
//——2012-12-11日更新 獲取"產品付費數量等於0這個問題"的原因 看到很多童鞋問到,為什麼每次都返回數量等於0?? 其實有童鞋已經找到原因了,原因是你在 ItunesConnect 裡的 “Contracts,
ios 應用內支付(In-App Purchase,沙盒測試,後臺驗證)
1.蘋果iTunes Connect內購產品資訊錄入。 1)建立app內購買專案(Create New),選擇型別: 1.消耗型專案 對於消耗型 App 內購買專案,使用者每次下載時都必須進行購買。一次性服務通常屬於消耗型專案,例如釣魚App 中的魚餌。 2.非消耗型