https://www.jianshu.com/p/9ed49bbec9ed
Excerpt
//根据地址创建data对象
+ dataWithContentsOfFile:
//根据地址创建data对象,并根据枚举类型操作data
+ dataWithContentsOfFile:options:error:
typedefNS_OPTIONS(NSUInteger,NSDataReadingOptions) {
//使用这个参数后,iOS就不会把整个文件全部读取的内存了,而是将文件映射到进程的地址空间中。//这么做并不会占用实际内存。这样就可以解决内存满的问题。
NSDataReadingMappedIfSafe=1UL <<0,
//数据将不会存入内存中,对于只会使用一次的数据,这么做会提高性能。
NSDataReadingUncached=1UL <<1,
//数据始终会被存储在内存中,如果用户定义了NSDataReadingMappedIfSafe和这个枚举,那么这个枚举会优先起作用。
NSDataReadingMappedAlwaysNS_ENUM_AVAILABLE(10_7,5_0) =1UL <<3,
//老枚举,苹果建议不再使用。
NSDataReadingMapped=NSDataReadingMappedIfSafe,// Deprecated name for NSDataReadingMappedIfSafeNSMappedRead=NSDataReadingMapped,// Deprecated name for NSDataReadingMappedNSUncachedRead=NSDataReadingUncached// Deprecated name for NSDataReadingUncached
};
Storing Data
-writeToFile:atomically:
将接收到的字节写入给定路径指定的文件。 atomically这个参数意思是,如果为YES则保证文件的写入原子性,就是说会先创建一个临时文件,直到文件内容写入成功再导入到目标文件里。 如果为NO,则直接写入目标文件里。
-writeToFile:options:error:
typedef NS_OPTIONS(NSUInteger, NSDataWritingOptions) {
//等同于上面的atomically == YES
NSDataWritingAtomic = 1UL << 0,
//如果已存在文件,则不会覆盖原文件,写入失败。
NSDataWritingWithoutOverwriting NS_ENUM_AVAILABLE(10_8, 6_0) = 1UL << 1,
//資源沒有與其相關聯的特殊保護。任何時候都可以讀取或寫入資源
NSDataWritingFileProtectionNone NS_ENUM_AVAILABLE_IOS(4_0) = 0x10000000,
//資源會以加密格式儲存在磁碟,當裝置處於鎖定狀態或者正在開機時,將無法進行讀取或寫入。 NSDataWritingFileProtectionComplete NS_ENUM_AVAILABLE_IOS(4_0) = 0x20000000,
//資源會以加密格式儲存在磁碟。當裝置處於鎖定狀態時,可以建立資源,但是一旦關閉資源,就無法再次開啟,直到裝置解除鎖定。如果在解除鎖定時開啟了資源,則可以如常繼續存取資源,即使使用者鎖定了裝置也無妨。 NSDataWritingFileProtectionCompleteUnlessOpen NS_ENUM_AVAILABLE_IOS(5_0) = 0x30000000,
//資源會以加密格式儲存在磁碟,只有在裝置開機之後,才能存取資源。在使用者首次解除鎖定裝置之後,您的應用程式可以存取資源,即使使用者之後鎖定了裝置,還是可以繼續存取。 NSDataWritingFileProtectionCompleteUntilFirstUserAuthentication NS_ENUM_AVAILABLE_IOS(5_0) = 0x40000000, NSDataWritingFileProtectionMask NS_ENUM_AVAILABLE_IOS(4_0) = 0xf0000000,
//不建议再使用 NSAtomicWrite = NSDataWritingAtomic // Deprecated name for NSDataWritingAtomic
};