美文网首页iOS
fileURLWithPath与 URLWithString的区

fileURLWithPath与 URLWithString的区

作者: Calabash_Boy | 来源:发表于2016-06-07 01:09 被阅读3930次

作为一只没有节操的程序猿,越发理解分享是多么重要的事情;因此以后会把工作和学习中遇到的问题和技巧分享上来,万一被哪位程序媛或者程序猿看上了呢?

好了,回归正题,今天在创建的时候,小手一抖,引出了今天要讲的话题:fileURLWithPath与 URLWithString的区别;

NSURLSessionDownloadTask*downTask = [sessiondownloadTaskWithURL:url completionHandler:^(NSURL*_Nullablelocation,NSURLResponse*_Nullableresponse,NSError*_Nullableerror) {

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

NSString*fullPath = [cachestringByAppendingPathComponent:fileName];

[[NSFileManagerdefaultManager] moveItemAtURL:location

toURL:[NSURL URLWithString:fullPath] error:nil];

}] resume];

各位犀利的双眼已经看出来这是NSSession创建下载任务的方法,重点在于小手抖出来[NSURL URLWithString:fullPath]的URL创建方法后,在Cache文件夹下始终没有得到要下载的图片,后来把[NSURL URLWithString:fullPath]改为[NSURL fileURLWithPath:fullPath]后,下载的图片才娇羞呈现;

因此整理了一下这两种创建URL方法的区别;

首先我们要分清楚URL和路径是不同的概念;URL是包含协议头 + 主机地址 +资源路径,如果访问的资源是本机的,那么主机地址可以省略;而路径是不用包含协议头和主机地址的;各位客官请过目下面的测试:

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent*)event

{

NSDictionary*dict =@{@"name":@"xiaoqiang"};

NSString*filePath =@"/Users/calabashBoy/Desktop/name.plist";

NSString*fileURL =@"file:///Users/calabashBoy/Desktop/name.plist";

NSURL*url1 = [NSURL URLWithString:fileURL];

NSURL*url2 = [NSURL fileURLWithPath:filePath];

NSURL*url3 = [NSURL URLWithString:filePath];

NSLog(@"url1 = %@\n url2 = %@\n url3 = %@",url1,url2,url3);

//    [dict writeToFile:filePath atomically:YES]; //可以生成

//    [dict writeToFile:fileURL atomically:YES];//无法生成 —>路径中不能包含协议头

//    [dict writeToURL:url1 atomically:YES];//可以生成

//    [dict writeToURL:url2 atomically:YES];//可以生成

[dict writeToURL:url3 atomically:YES];//无法生成 —>字符串中必须包含协议头,不然生成的URL是错误的;

}

打印出的结果:url1 = file:///Users/calabashBoy/Desktop/name.plist

url2 = file:///Users/calabashBoy/Desktop/name.plist

url3 = /Users/calabashBoy/Desktop/name.plist

可以看出来使用fileURLWithPath创建出来的URL会自动加上协议头file://;

而使用URLWithString创建的URL,与原有的字符串一模一样;

那么当我们需要根据一个字符串创建URL的时候,如果这个字符串包含协议头,那么使用URLWithString,一般用于网络资源的URL创建;

如果访问的是本地资源,而且不包含协议头,使用fileURLWithPath创建URL;当然可以用URLWithString拼接一个协议头来实现,不过这….耿直如你;

另外在使用fileURLWithPath创建URL时,不用担心URL中混有中文的问题,系统会自动实现转换;

因此如果在访问本地资源的时候,不要犹豫,fileURLWithPath是你的首选.不过要注意去掉字符串中的协议头;

好了,第一篇就就先这样吧,试笔之作,希望大家多多指正,定当虚心接受;

相关文章

网友评论

    本文标题:fileURLWithPath与 URLWithString的区

    本文链接:https://www.haomeiwen.com/subject/uvworttx.html