沙盒

沙盒简介

  • 默认情况下,每个沙盒含有3个文件夹:Documents, Library 和 tmp。因为应用的沙盒机制,应用只能在几个目录下读写文件

    Documents:苹果建议将程序中建立的或在程序中浏览到的文件数据保存在该目录下,iTunes备份和恢复的时候会包括此目录,如果保存了下载的数据,程序提交会被直接被拒绝

    Library:存储程序的默认设置或其它状态信息;

    Library/Caches:存放缓存文件,iTunes不会备份此目录,此目录下文件不会在应用退出删除

    Library/Preferences:偏好设置文件

    tmp:提供一个即时创建临时文件的地方,在iPhone在重启时,会丢弃所有的tmp文件。

获取沙盒目录

  • //在模拟器上,沙盒目录是变化的,所以每次都要打印

    // NSString * path = NSHomeDirectory();

    NSArray * array = @[@1,@2,@3,@4,@5];

  • //获取沙盒目录的方法

    NSString * path = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject];

  • //追加文件名

    path = [path stringByAppendingPathComponent:@"data.plist"];

    [array writeToFile:path atomically:YES];

    NSLog(@"%@",path);

系统偏好设置代码

//偏好设置,用户信息,是否推送,是否支持3G.
NSUserDefaults * ud = [NSUserDefaults standardUserDefaults];
//存储偏好数据
// [ud setObject:@"11" forKey:@"age"];
//
// [ud setInteger:20 forKey:@"weight"];
//
// // setObject + synchronize
// //马上存入本地
// [ud synchronize]; //从本地获取
// NSLog(@"%@", [ud objectForKey:@"username"]); [ud removeObjectForKey:@"age"];

有沙盒的网络请求

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    SXTShopCell * cell = [tableView dequeueReusableCellWithIdentifier:identifier];

    SXTShop * shop = self.dataList[indexPath.row];

    cell.shop = shop;

    //为了避免重复加载的问题,创建了downloadImage,downloadImage属于数据源,当tableview滚动的时候就可以给cell的数据赋值

    //从图片缓冲池里找到对应的图片
if ([self.imageCache objectForKey:shop.shop_image]) { //如果下载过,直接从内存中获取图片
// cell.iconView.image = shop.downloadImage;
cell.iconView.image = self.imageCache[shop.shop_image]; } else { //从本地获取缓存图片
UIImage * image = [UIImage imageWithContentsOfFile:[self cacheWithPathUrl:shop.shop_image]]; //如果本地存在
if (image) { //将本地图片放入内存中
[self.imageCache setObject:image forKey:shop.shop_image]; cell.iconView.image = image; } else { //设置默认图片
cell.iconView.image = [UIImage imageNamed:@"defaultImage"]; [self downloadImage:indexPath];
}
} return cell;
} - (void)downloadImage:(NSIndexPath *)indexPath { SXTShop * shop = self.dataList[indexPath.row]; if ([self.operationDict objectForKey:shop.shop_image]) { NSLog(@"已经请求过了,请等待下载"); } else { //如果未下载过,开启异步线程
NSBlockOperation * op = [NSBlockOperation blockOperationWithBlock:^{ //模拟网络延时
[NSThread sleepForTimeInterval:1]; //通过url获取网络数据
NSData * data = [NSData dataWithContentsOfURL:[NSURL URLWithString:[NSString stringWithFormat:@"%@%@",baseUrl,shop.shop_image]]]; //将数据装换为图片
UIImage * image = [UIImage imageWithData:data]; //如果有图片
if (image) { //通知model,将图片赋值给downloadImage,以便下次从内存获取
// shop.downloadImage = image; //将图片作为value,将url作为key
[self.imageCache setObject:image forKey:shop.shop_image]; //将网络获取的图片存入沙盒
[data writeToFile:[self cacheWithPathUrl:shop.shop_image] atomically:YES]; //获取主队列,更新UI
[[NSOperationQueue mainQueue] addOperationWithBlock:^{ //刷新第indexPath单元的表格
[self.tableView reloadRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationNone]; }];
}
}]; //将请求加入操作缓冲池中
[self.operationDict setObject:op forKey:shop.shop_image]; //将请求加入全局队列
[self.queue addOperation:op];
}
} - (NSString *)cacheWithPathUrl:(NSString *)netUrl { //获取沙盒路径
NSString * path = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject]; //获取url的最后一项路径和path拼接
path = [path stringByAppendingPathComponent:[netUrl lastPathComponent]]; return path;
} - (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
[self.view addSubview:self.tableView];
} //当内存发生警报时,调用
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated. [self.imageCache removeAllObjects];
[self.operationDict removeAllObjects]; [self.queue cancelAllOperations];
}

iOS如何获取网络图片(三)有沙盒的的更多相关文章

  1. iOS如何获取网络图片(二)

    ios如何获取图片(二)无沙盒下 解决问题 *解决问题1:tableView滑动卡顿,图片延时加载 解决方法:添加异步请求,在子线程里请求网络,在主线程刷新UI *解决问题2:反复请求网络图片,增加用 ...

  2. iOS开发——多线程篇——快速生成沙盒目录的路径,多图片下载的原理、SDWebImage框架的简单介绍

    一.快速生成沙盒目录的路径 沙盒目录的各个文件夹功能 - Documents - 需要保存由"应用程序本身"产生的文件或者数据,例如:游戏进度.涂鸦软件的绘图 - 目录中的文件会被 ...

  3. IOS开发-UI学习-沙盒机制&文件操作

    ž苹果为软件的运行提供了一个沙盒机制 每个沙盒含有3个文件夹:Documents, Library 和 tmp.因为应用的沙盒机制,应用只能在几个目录下读写文件 žDocuments:苹果建议将程序中 ...

  4. 将UIImage保存到iOS照片库和对应程序沙盒中-b

    1.保存到iOS照片库需要引入QuartzCore.framework框架,具体代码如下:.h文件#import <QuartzCore/QuartzCore.h>UIImageView ...

  5. iOS如何获取网络图片(一)

    static NSString * baseUrl = @"http://192.168.1.123/images/"; - (UITableViewCell *)tableVie ...

  6. iOS之沙盒机制和如何获取沙盒路径

    iOS APP可以在自己的沙盒里读写文件,但是,不可以访问其他APP的沙盒.每一个APP都是一个信息孤岛,相互是不可以进行通信的,唯独可以通过URL Scheme.沙盒里面的文件可以是照片.声音文件. ...

  7. iOS沙盒机制的基本操作总结

    每个ios程序都有自己的沙盒(sandBox),ios8之后提供沙盒部分开放 我们可以访问沙盒下的文件夹 文件夹包括: 1,documents:保存应用运行时生成的需要持久化的数据 2.tem:保存临 ...

  8. 再谈CVE-2017-7047 Triple_Fetch和iOS 10.3.2沙盒逃逸

    作者:蒸米 ----------------- 0x00 序 Ian Beer@google发布了CVE-2017-7047Triple_Fetch的exp和writeup[1],chenliang@ ...

  9. iOS沙盒及数据存储

    时间久了容易忘,针对沙盒的相关实用技巧做一个记录和整理. 一.iOS数据存储常用方式 1.XML属性列表(plist) 不是所有对象都可以写入: 2.Preference(偏好设置) 本质还是通过“p ...

随机推荐

  1. Windows下ELK环境搭建(单机多节点集群部署)

    1.背景 日志主要包括系统日志.应用程序日志和安全日志.系统运维和开发人员可以通过日志了解服务器软硬件信息.检查配置过程中的错误及错误发生的原因.经常分析日志可以了解服务器的负荷,性能安全性,从而及时 ...

  2. 快速击键(MyEclipse编写的QuickHit项目)

    public class Level { private int levelNo;// 各级别编号 private int strLength;// 各级别一次输出字符串的长度 private int ...

  3. C#深入.NET平台的软件系统分层开发

    今天我们来讲讲分层开发,你从标题能不能简单的认识一下什么是分层呢? 不懂也没关系,接下来我来给你讲讲. 第一章 软件系统的分层开发 (1)其实分层模式可以这样定义:将解决方案中功能不同的模块分到不同的 ...

  4. IHTMLDocument2

    {IHTMLDocument2 方法:} write //写入 writeln //写入并换行 open //打开一个流,以收集 document.write 或 document.writeln 的 ...

  5. C# 3DES加密

    最近一个项目中,因为服务端是用的java开发的,客户端是用的C#,由于通信部分采用到了3DES加密,所以做个记录,以备以后需要的时候直接用. 这是对方(java)的加密算法,和网上流传的代码也差不多( ...

  6. 表单input中录入资料的检查方法及示例

    本文内容 表单录入信息的检查原则 常见检查的三种方法 示例     输入框有字符长度的限制     输入框有输入字符个数范围的限制 知识补给--检查方式的介绍     输入框只可(或不可)输入数 ...

  7. JAVA实现的微信扫描二维码支付

    吐槽一下 支付项目采用springMvc+Dubbo架构实现,只对外提供接口. 话说,为什么微信支付比支付宝来的晚了那么一点,一句话,那一阵挺忙的,然后就没有时间整理,最近做完支付宝支付,顺便也把微信 ...

  8. ACm-ICPC Live Archive 7464---Robots

    ACm-ICPC Live Archive 7464---Robots Write a program to collect data from robots. We are given two se ...

  9. CodeBlock

    CodeBlock官网是: http://www.codeblocks.org/ 选择Download the binary release: 根据自己电脑的情况选择想要的版本:(以博主电脑为例,wi ...

  10. 代码设置Shape和Selector

    开发中经常需要使用Shape和Selector,如果每个都用xml设置的话,会占用apk大小,同时命名多了也会混乱,使用代码来设置会方便很多. 需要用到2个类:GradientDrawable和Sta ...