您的当前位置:首页正文

iOS NSURL 的使用

来源:华拓网

作为一名开发人员,大家肯定对URL非常熟悉吧,但是有多少人对它去做过更深入的了解呢?在很多人眼里也许它就仅仅是一个URL,一个获取数据的接口而已。然而在我看来,它不仅是URL,还是一个通信链。为什么说是通信链呢,因为它可以按我自己制定的规则协议去传达我想要做的事情,尤其是在项目中解耦是非常的好用,这正是我今天所要分享的内容。相信很多人对URL并没有一个完整的认识,我先大致介绍下URL吧。

coverImage.jpg

URL的定义:

Resource 。

URL的组成:

URL的一般语法格式为(带方括号[]的为可选项):
protocol://hostname[:port]/path/[;parameters][?query]#fragment
完整的、带有授权部分的普通统一资源标志符语法格式为:
协议://用户名:密码@子域名.域名.顶级域名:端口号/目录/文件名.文件后缀?参数=值#标志

URL的格式说明:

1.protocol(协议):

指定使用的传输协议,下表列出 protocol 属性的有效方案名称。 最常用的是 。

  • http 通过 HTTP 访问该资源。 格式 http://
  • https 通过安全的 HTTPS 访问该资源。 格式 https://
  • file 资源是本地计算机上的文件。 格式 file:///(注意后边应是三个斜杠)
  • ftp 通过 FTP 访问该资源。 格式 ftp://
  • gopher 通过 Gopher 协议访问该资源。
  • mailto 资源为电子邮件地址,通过 SMTP 访问。 格式 mailto:
  • MMS 通过支持 MMS(流媒体)协议的播放该资源。(代表软件:Windows Media Player) 格式 MMS://
  • ed2k 通过支持 ed2k(专用下载链接)协议的 P2P 软件访问该资源。(代表软件:电驴) 格式 ed2k://
  • Flashget 通过支持 Flashget:(专用下载链接)协议的 P2P 软件访问该资源。(代表软件:快车) 格式 Flashget://
  • thunder 通过支持 thunder(专用下载链接)协议的 P2P 软件访问该资源。(代表软件:迅雷) 格式 thunder://
  • news 通过 NNTP 访问该资源。
2.hostname(主机名):

是指存放资源的服务器的域名系统(DNS) 主机名或 IP 地址。有时,在主机名前也可以包含连接到服务器所需的用户名和密码(格式:username:password@hostname)。

3.port(端口号):
4.path(路径):

由零或多个“/”符号隔开的字符串,一般用来表示主机上的一个目录或文件地址。

5.parameters(参数):

这是用于指定特殊参数的可选项。

6.query(查询):

7.fragment(信息片断):

字符串,用于指定网络资源中的片断。例如一个网页中有多个名词解释,可使用fragment直接定位到某一名词解释。

而在 Objective-C 中,这些组成部分可以用系统提供的方法可以很方便的获取到,而不用麻烦的处理一堆字符串,下面给大家举个栗子🌰。

    NSString *urlStr = 
    NSURL    *URL = [NSURL URLWithString:urlStr];
    NSString *absoluteString = URL.absoluteString;
    NSString *baseURL = URL.baseURL.absoluteString;
    NSString *scheme = URL.scheme;
    NSString *host = URL.host;
    NSString *path = URL.path;
    NSArray  *pathComponents = URL.pathComponents;
    NSString *lastPathComponent = URL.lastPathComponent;
    NSString *pathExtension = URL.pathExtension;
    NSString *query = URL.query;
    NSString *fragment = URL.fragment;
    NSString *parameterString = URL.parameterString;
    NSString *relativePath = URL.relativePath;
    NSString *port = [URL.port stringValue];
    NSString *user = URL.user;
    NSString *password = URL.password;
    
    // absoluteString = 
    NSLog(@"absoluteString = %@", absoluteString);
    // baseURL = (null)
    NSLog(@"baseURL = %@", baseURL);
    // scheme = https
    NSLog(@"scheme = %@", scheme);
    // host = 
    NSLog(@"host = %@", host);
    // port = 8080
    NSLog(@"port = %@", port);
    // path = /path/subpath
    NSLog(@"path = %@", path);
    // pathComponents = ("/", path, subpath)
    NSLog(@"pathComponents = %@", pathComponents);
    // lastPathComponent = subpath
    NSLog(@"lastPathComponent = %@", lastPathComponent);
    // pathExtension = @""  //<object returned empty description>
    NSLog(@"pathExtension = %@", pathExtension);
    // query = uid=123&gid=45
    NSLog(@"query = %@", query);
    // fragment = fragment=009&fragment
    NSLog(@"fragment = %@", fragment);
    // relativePath = /path/subpath (The same as path if baseURL is nil)
    NSLog(@"relativePath = %@", relativePath);
    // parameterString = parms=test_parms
    NSLog(@"parameterString = %@", parameterString);
    // user = (null)
    NSLog(@"user = %@", user);
    // password = (null)
    NSLog(@"password = %@", password);

----------------------------- 分割线(下面才是重点) -----------------------------

URL的使用:

也许有人会问,这不就是字符串嘛,干嘛还非得搞个URL去处理。当然字符串也可以处理,但是我感觉用系统的NSURL一些方法处理起来更方便一点,获取某些参数或值的时候更简洁一点,当然这也看个人喜好和业务需求,怎样用方便,喜欢用什么就用什么,毕竟条条大路通罗马。😂😂😂