产品的需求是展示用户头像在登录页面,不论是否登录。我的选择是登陆的时候把头像的数据保存到本地沙盒中。打开登录页面的时候先访问沙盒路径,如果有头像,加载展示,没有的话请求数据保存起来。如果用户没有添加头像,展示默认的占位图片。这里主要说下如何写入图片到沙盒中。
//创建属性
@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表示不压缩,数值越小压缩比例越大
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沙盒机制介绍
iOS应用程序只能在为该改程序创建的文件系统中读取文件,不可以去其它地方访问,此区域被成为沙盒,所以所有的非代码文件都要保存在此,例如图像,图标,声音,映像,属性列表,文本文件等。
IOS每个应用程序都有自己的三个目录(Document,Library,tmp),他们之间不能相互访问。
Document:存放应用程序的数据 (苹果建议将程序中建立的或在程序中浏览到的文件数据保存在该目录下,iTunes备份和恢复的时候会包括此目录)。
Library:存储程序的默认设置或其它状态信息。
tmp:应用程序存储临时文件。