你好,歡迎來到IOS教程網

 Ios教程網 >> IOS編程開發 >> IOS開發綜合 >> iOS --- 關於SandBox機制及文件讀寫的幾種方式

iOS --- 關於SandBox機制及文件讀寫的幾種方式

編輯:IOS開發綜合

iOS中的SandBox(沙盒)機制是一種安全體系,它規定了APP只能在為該APP創建的文件夾內讀取文件,不可以訪問其他地方的內容。所有的非代碼文件都保存在這個地方,比如圖片、聲音、屬性列表和文本文件等。即:

每個應用程序都在自己的沙盒內 不能隨意跨越自己的沙盒去訪問別的應用程序沙盒的內容 應用程序向外請求或接收數據都需要經過權限認證

SandBox

默認情況下,每個APP的SandBox中有三個文件夾: Documents, Library和tmp, 該APP只能在這三個目錄下進行文件的讀寫操作.
獲取SandBox的路徑:

let home: String = NSHomeDirectory()
Documents: Apple建議將APP中建立的或浏覽到的文件數據保存在此, iTunes會將其備份. Library: 存儲APP的默認設置或其他狀態信息, iTunes會將其備份. Library/Preferences: APP的偏好設置文件, 可使用NSUserDefaults來獲取和設置. Library/Cached: 存放緩存文件, 該目錄中文件不會在APP退出時刪除. 而iTunes不會備份該目錄. tmp: 創建臨時文件的地方.

獲取各個路徑的方式如下:

// 使用NSSearchPathForDirectoriesInDomains來獲取SandBox中目錄的全路徑
let paths: Array = NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentDirectory, NSSearchPathDomainMask.UserDomainMask, true) as Array!
print(paths : (paths))
let documentsPath: String = paths[0] as String!
print(documents : (documentsPath))

let library: String = NSSearchPathForDirectoriesInDomains(.LibraryDirectory, .UserDomainMask, true)[0]
print(library : (library))

let preferencs: String = NSSearchPathForDirectoriesInDomains(.PreferencePanesDirectory, .UserDomainMask, true)[0]
print(preferencs : (preferencs))

let caches: String = NSSearchPathForDirectoriesInDomains(.CachesDirectory, .UserDomainMask, true)[0]
print(caches : (caches))

NSBundle

NSBundle包含了APP打包的所有文件, 如其中Info.plist文件包含了APP的基本信息。

// 獲取Info.plist文件
let infoPath: String = NSBundle.mainBundle().pathForResource(Info, ofType: plist) as String!
// 讀取Dictionary格式的內容
infos = NSMutableDictionary(contentsOfFile: infoPath) as NSMutableDictionary!
// 獲取CFBundleName信息
let bundleName: String = infos[CFBundleName] as! String
print(bundleName)

對NSBundle中文件寫入內容的方式與其他文件一樣。見下文。
一般加載xib文件也是通過NSBundle來獲取:

var nibs: [AnyObject] = NSBundle.mainBundle().loadNibNamed(testNib, owner: nil, options: nil)
var testNib: UIView = nibs.last as! UIView

文件讀寫

文件讀寫是非常基本的一種操作,iOS中常用contentsOfFile,writeToFile等類似的方法實現。
首先獲取文件路徑:

let docPath: String = NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentDirectory, NSSearchPathDomainMask.UserDomainMask, true)[0]
let filePath: String = docPath.stringByAppendingString(/filename)

在SandBox的Documents目錄下找到filename文件,如沒有則新建一個。

讀文件

讀取String:

var content = String(contentsOfFile: filePath, encoding: NSUTF8StringEncoding)
var content = String(data: NSData(contentsOfFile: filePath)!, encoding: NSUTF8StringEncoding)!

讀取NSArray, NSDictionary, NSData:

var array = NSArray(contentsOfFile: filePath)
var dict = NSDictionary(contentsOfFile: filePath)
var data = NSData(contentsOfFile: filePath)

讀取圖片:

let imagePath: String = NSBundle.mainBundle().pathForResource(Image, ofType: jpg) as String!
var image: UIImage = UIImage(contentsOfFile: imagePath)!
// 通過NSData來讀取
var data: NSData = NSData(contentsOfFile: imagePath)!
image = UIImage(data: data)!

讀取網絡圖片:

var url: NSURL = NSURL(string: http://imgphoto.gmw.cn/attachement/jpg/site2/20151010/eca86bd9dc471782b9ff28.jpg)!
data = NSData(contentsOfURL: url)!
image = UIImage(data: data)! 

寫文件

寫入String:

try testing content again.writeToFile(filePath, atomically: true, encoding: NSUTF8StringEncoding)
// 通過NSData方式寫入String
var data = NSMutableData()
data.appendData(testing content.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: true)!)
data.writeToFile(filePath, atomically: true)

寫入NSArray, NSDictionary, NSData:

array.writeToFile(filePath, atomically: true)
dict.writeToFile(filePath, atomically: true)
data.writeToFile(filePath, atomically: true)

存儲圖片

存儲圖片通常使用NSData的格式向文件中寫入。

let docPath: String = NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentDirectory, NSSearchPathDomainMask.UserDomainMask, true)[0]
imagePath = docPath.stringByAppendingString(/testImage.jpg)
data.writeToFile(imagePath, atomically: true)
image = UIImage(contentsOfFile: imagePath)!

data = NSData(data: UIImagePNGRepresentation(image)!)
// UIImageJPEGRepresentation(image, 1.0) // JPEG比PNG格式壓縮更多

var imagePath2: String = docPath.stringByAppendingString(/testImage2.png)
data.writeToFile(imagePath2, atomically: true)
image = UIImage(contentsOfFile: imagePath2)!

 

  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved