沙箱:ios设备上为每一个应用程序建立的一个私有文件,用来保存数据,不同应用程序不能访问彼此的沙箱。
沙箱目录如下
沙箱里面的文件以及获取
1.Documents:保存比较大而且更新频率较高的数据,或者在应用程序里面建立的数据,iTunes或iCloud更新时可以自动备份。
访问Documents目录的语句:
NSArray *array = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,Yes) ;
NSString *docPath = array[0] ;
2.Library->Caches:用来保存缓存文件,例如图片etc。
访问Caches目录的语句(与document相似):
NSArray *array = NSSearchPathForDirectoriesInDomains(NSCachesDirectory,NSUserDomainMask,Yes) ;
NSString *docPath = array[0] ;
3.Library->Preferences:系统偏好设置,用来保存与应用程序设置相关的小数据。
访问Preferences目录的语句:
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults] ;
defaults = [defaults initWithSuiteName:@"preferencetest"] ;
[defaults setObject:@"yans67" forKey:@"name"] ;
[defaults setObject:@"15766227833" forKey:@"number"] ;
[defaults setInteger:21 forKey:@"age"] ;
[defaults synchronize] ; //同步保存到磁盘
4.tmp:用来保存临时文件,应用程序退出时数据将丢失。
访问tmp目录的语句:
NSString *tmpPath = NSTemporaryDirectory( ) ;
PS:如果想在沙箱里面创建文件,则需要NSFileManager类的帮助
NSFileManager *fm = [NSFileManager defaultManager] ;
//判断plist文件是否存在,不存在则重新建立一个
if(![fm fileExistsAtPath:@"文件的绝对路径"){
[fm createFileAtPath:@"文件的绝对路径" contents:nil attributes:nil] ;
}
——————————————————华丽丽的分割线————————————————————–
MKNetworkKit
1.在gitHub上下载MKNetworkKit项目,并将项目里面的NMKNetworkKit文件夹复制到自己的项目中
2.在工程添加相应的framework
3.使用时添加头文件 #import “MKNetworkKit.h”
先介绍两个重要的类:
MKNetworkEngine:
网络管理队列,负责生成网络请求(创建operation对象)和执行网络请求(enqueOperation:op)。
MKNetworkOperation :
网络请求操作。
示例代码如下(下载一张图片,并将图片保存到caches目录中,myProgress为进度条,email邮箱为51work6注册账号):
- (IBAction)downloadAction:(id)sender {
if(!self.myImage.image){
// 设置下载图片后保存的路径
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) ;
NSString *temp = paths[0] ;
NSString *downloadpath = [temp stringByAppendingPathComponent:@"test1.jpg"] ;
// 1.请求的url路径,并将其转化成url格式
NSString *path = [NSString stringWithFormat:@"/service/download.php?email=1018743361@qq.com&FileName=test1.jpg"] ;
path = [path stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding] ;
// 2.定义网络管理队列engine,并且为其网络定义主机名
MKNetworkEngine *engine = [[MKNetworkEngine alloc]initWithHostName:@"51work6.com"] ;
// 3.定义网络请求,并且直接定义其路径
MKNetworkOperation *op = [engine operationWithPath:path params:nil httpMethod:@"post"] ;
// 4.添加网络请求
// 4.1下载地址,相对于post请求多出了这一句,但是必须在其参数中定义要下载的路径
[op addDownloadStream:[NSOutputStream outputStreamToFileAtPath:downloadpath append:NO] ];
// 4.2下载进度改变
[op onDownloadProgressChanged:^(double progress) {
self.myProgress.progress = progress ;
}];
// 4.3完成请求后的处理
[op addCompletionHandler:^(MKNetworkOperation *completedOperation) {
UIImage *image = [UIImage imageWithContentsOfFile:downloadpath] ;
self.myImage.image = image ;
} errorHandler:^(MKNetworkOperation *completedOperation, NSError *error) {
NSLog(@"mknetwork请求错误") ;
}] ;
// 5.将网络请求加入网络管理队列
[engine enqueueOperation:op] ;
}
}
参考资料:《IOS开发指南 从零基础到App Store上架》第三版 关东升著