產(chǎn)品的需求是展示用戶頭像在登錄頁面挑宠,不論是否登錄今妄。我的選擇是登陸的時候把頭像的數(shù)據(jù)保存到本地沙盒中郑口。打開登錄頁面的時候先訪問沙盒路徑,如果有頭像盾鳞,加載展示犬性,沒有的話請求數(shù)據(jù)保存起來。如果用戶沒有添加頭像腾仅,展示默認(rèn)的占位圖片乒裆。這里主要說下如何寫入圖片到沙盒中。
//創(chuàng)建屬性
@property(nonatomic,strong)UIImageView*headerIMGView;
//主要代碼
//寫入
[_headerIMGViewsd_setImageWithURL:[NSURL URLWithString:url];
NSData*data = [NSData dataWiturlhContentsOfURL:url];
UIImage*image = [UIImageimageWithData:data];// 取得圖片
// 本地沙盒目錄
NSString*path = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES)lastObject];
// 得到本地沙盒中名為"MyImage"的路徑推励,"MyImage"是保存的圖片名
NSString*imageFilePath = [pathstringByAppendingPathComponent:@"MyImage"];
NSLog(@"%@", imageFilePath);
// 將取得的圖片寫入本地的沙盒中鹤耍,其中0.5表示壓縮比例,1表示不壓縮吹艇,數(shù)值越小壓縮比例越大
BOOLsuccess = [UIImageJPEGRepresentation(image,0.5)writeToFile:imageFilePathatomically:YES];
if(success){
NSLog(@"寫入本地成功");
}else{
NSLog(@"寫入本地失敗");
}
//讀取
NSString*aPath3=[NSStringstringWithFormat:@"%@/Documents/%@.png",NSHomeDirectory(),@"MyImage"];
// 拿到沙盒路徑圖片
UIImage*imgFromUrl3=[[UIImagealloc]initWithContentsOfFile:aPath3];
_headerIMGView.image= imgFromUrl3;
//理論:
IOS沙盒機(jī)制介紹
iOS應(yīng)用程序只能在為該改程序創(chuàng)建的文件系統(tǒng)中讀取文件惰蜜,不可以去其它地方訪問,此區(qū)域被成為沙盒受神,所以所有的非代碼文件都要保存在此抛猖,例如圖像,圖標(biāo),聲音财著,映像联四,屬性列表,文本文件等撑教。
IOS每個應(yīng)用程序都有自己的三個目錄(Document,Library,tmp)朝墩,他們之間不能相互訪問。
Document:存放應(yīng)用程序的數(shù)據(jù) (蘋果建議將程序中建立的或在程序中瀏覽到的文件數(shù)據(jù)保存在該目錄下伟姐,iTunes備份和恢復(fù)的時候會包括此目錄)收苏。
Library:存儲程序的默認(rèn)設(shè)置或其它狀態(tài)信息。
tmp:應(yīng)用程序存儲臨時文件愤兵。