- Documents : 1: 存入一些永遠不被刪除的文件(不會被系統主動刪除),itunes備份時,同時也會備份Documents文件(條件: 儘量不在Documents放入音頻視頻等太大的東西,只放一些重要文件,以免審覈被拒) 注 :可以存,有方法讓什麼
- Library : 1 Caches : 存儲緩存的文件夾 當用戶對某一個URL做請求操作的時候,這個URL裏面的東西會保存在主機裏面的某個位置 . Cookie 和Session . (itunes不會備份此目錄,文件不會再應用退出時刪除,一般存放比較大,不是特別重要的資源)
- tmp : 保存應用運行時所需的臨時數據,使用完畢後會將相應的文件從該目錄刪除.應用沒有運行時或者手機重啓時 ,系統也有可能會清除該目錄下的文件,iTunes 不會同步該目錄
- 第一種 : 通過該NSSeach搜索文件夾得地址,能獲取Documents 和Library 內部文件夾地址, 但是不能獲取tmp文件夾得地址,其他的都可以獲取到.
//NSLibraryDirectory / NSCachesDirectory
//NSUserDomainMask 表示用戶的主目錄
//第三個參數表示 展開"~" 的地址,設置爲YES 爲完整路徑
//NSSearchPathForDirectoriesInDomains獲取的是一個數組(NSArray<NSString *> *),數組只有一個元素,所以可以直接獲取objectAtIndex: 0 ;
NSString *documentPathStr = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)objectAtIndex:0];
- 第二種 : 首先獲取沙盒主路徑的地址,然後拼接上想要去的文件夾的地址.
NSString *homePathStr = NSHomeDirectory();
NSLog(@"homePathStr = %@",homePathStr);
//其次: 在沙盒主路徑後拼接Documents,拼接出來documents文件夾的路徑
NSString *documentsPathStr = [homePathStr stringByAppendingPathComponent:@"Library/Caches"];
NSLog(@"documents = %@",documentsPathStr);
//獲取tmp文件夾得路徑
NSString *tmpPathStr = NSTemporaryDirectory();
- 寫入
NSString *documentsPathStr = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)objectAtIndex:0];
NSLog(@"%@",documentsPathStr);
//2 . 知道要存什麼, 創建數據
NSString *str = @"hello world";
//3 . 要知道數據放哪裏 , 創建一個路徑,路徑的終點局勢存數據的文件 Component(成分)
NSString *strPath = [documentsPathStr stringByAppendingPathComponent:@"str.txt"];
//4 . 寫入操作
// atomically : YES 正當手機沒電關機 會保存文件
// NO 否
// encoding : 編碼方式
[str writeToFile:strPath atomically:YES encoding:NSUTF8StringEncoding error:nil];
- 讀取
根據imageName獲取圖片:會在緩存裏存一份,下次在獲取同名圖片,直接從緩存裏取. 優點 :快 ,只有第一次的時候慢 ,但是之後再獲取的話會很快. 缺點 : 會浪費內存, 如果只用致辭的話這塊內存就浪費掉了.
根據ContentsOfFile獲取到的圖片: 每次都會根據路徑去取圖片,不會佔用內存.如果圖片只使用一次,推薦使用ContentsOfFile
UIImage *image1 = [UIImage imageNamed:<#(nonnull NSString *)#>];
UIImage *image2 = [UIImage alloc]initWithContentsOfFile:<#(nonnull NSString *)#>];
123.png
[email protected]
[email protected]
- 寫入
- 讀取數據
UIImage *newImage = [UIImage imageWithData:newData];
UIImageView *newImageView = [[UIImageView alloc]initWithImage:newImage];
@property(nonatomic,copy)NSString * name;
@property(nonatomic,copy)NSString * gender;
@property(nonatomic,assign)NSUInteger age;
//nonatomic assign copy atomic weak strong readonly readwrite writeonly nonnull nullable retain unsafe_unretained
//_+屬性名 命名的成員變量
//
@implementation Person
//歸檔
//在歸檔和解檔的時候,要把所有的屬性都進行歸解檔
-(void)encodeWithCoder:(NSCoder *)aCoder{
[aCoder encodeObject:self.name forKey:@"name"];
[aCoder encodeObject:self.gender forKey:@"gender"];
[aCoder encodeInteger:self.age forKey:@"age"];
}
//解檔
-(instancetype)initWithCoder:(NSCoder *)aDecoder{
if (self = [super init]) {
self.name = [aDecoder decodeObjectForKey:@"name"];
self.gender = [aDecoder decodeObjectForKey:@"gender"];
self.age = [aDecoder decodeIntegerForKey:@"age"];
}
return self;
}
#import "Person.h"
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
person.name = @"男";
person.gender = @"男";
person.age = 38 ;
#pragma mark ------歸檔
//將複雜對象歸檔之後存入本地
NSKeyedArchiver *keyedArchiver = [[NSKeyedArchiver alloc]initForWritingWithMutableData:data];
#pragma mark --------解檔並使用
//第 1 步: 從本地獲取到Data
NSData *newData = [NSData dataWithContentsOfFile:dataPath];
NSLog(@"%@",newData);
//第 2 步: 通過獲取到的data 創建一個解檔工具
NSKeyedUnarchiver *keyedUnarchiver = [[NSKeyedUnarchiver alloc]initForReadingWithData:newData];
//第 3 步:創建一個Person對象,接收解檔結果
Person *newPerson = [keyedUnarchiver decodeObjectForKey:@"person"];
//第 4 步:結束解檔
[keyedUnarchiver finishDecoding];
//
NSLog(@"%@",newPerson);
//歸解檔是一種編碼方式,不是數據本地化的方式
//負載對象寫入本地實際上使用的還是writeToFile 的簡單寫入本地的方法
//整存整取 writeToFile
- 簡單對象寫入文件過程:
- 創建字符串獲取存儲文件的文件夾路徑
- 創建需要存儲的數據
- 創建字符串通過拼接創建並獲得存儲文件的路徑
- 寫入 writeToFile
- 讀取: 通過路徑讀取數據,使用stringWithContentsOfFile方法
- 歸檔:
- 創建對象 (並設置屬性)
- 遵循NSCoding協議,並實現方法
- 創建實例對象
- 創建NSData用來存儲對象並初始化歸檔工具
- 創建歸檔工具
- 歸檔
- 結束歸檔
- 獲取,拼接沙盒文件路徑
- 寫入
- 解檔
- 獲取沙盒文件路徑
- 創建NSData,並接收本地數據
- 創建解檔工具,通過NSData
- 創建對象,並接收解檔結果
- 結束解檔
- 什麼類型的對象可以直接存入本地?
- NSString(在寫入本地和讀取時,都需要進行UTF8轉碼)
- NSArray
- NSDictionary
- NSData {
- NSData如何轉出UIImage : imageWithData:NSData
- UIImage如果轉成NSData : UIImageJPEGRepresentation(UIImage *, CGFloat);
- 存入本地的過程?
- 直接寫入本地
- sqlite
- CoreData
- NSUserDefaultes(屬性列表,並不是數據本地化的一個方式,但是可以達成數據本地化)
- 傳值的方式:
- block
- 代理
- 屬性
- 單例
- 通知中心
- 數據本地化
- 設計模式(實現方式)
- 單例
- 代理
- Target-Action
- 通知中心