美文网首页
fileURLWithPath与 URLWithString的区

fileURLWithPath与 URLWithString的区

作者: 上下求索zsh | 来源:发表于2021-12-16 20:22 被阅读0次

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

    好了,回归正题,今天在创建的时候,小手一抖,引出了今天要讲的话题: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/bxavfrtx.html