-
NSURL简介:
URL是对可以从互联网上得到的资源的位置和访问方法的一种简洁的表示,是互联网上标准资源的地址。URL可能包含远程服务器上的资源地址,本地磁盘上的文件的路径,甚至任意一段编码的数据。NSURL是为了方便我们操作。
-
NSURL用途
- 对于代表本地文件的url,你可以直接操作这些文件的属性。例如,修改文件的最后修改时间。
- 可以使用url进行网络通信。例如,POST 、GET请求。
- 可以使用url读写本地文件。例如,可以通过一个本地文件的url,调用 stringWithContentsOfURL 方法,得到NSString格式的文件内容。
- 可以使用url进行通讯。例如,可以使用openURL:方法来拨打电话,发邮件,发短信。
-
示例1
NSURL *url = [NSURL URLWithString:@"https://www.taobao.com/markets/gmall/pc-index?spm=a21bo.2017.2005-qqg.3.5af911d9pNWXru"];
NSLog(@"scheme:%@", [url scheme]); //协议 https
NSLog(@"host:%@", [url host]); //域名 www.taobao.com
NSLog(@"absoluteString:%@", [url absoluteString]); //完整的url字符串 https://www.taobao.com/markets/gmall/pc-index?spm=a21bo.2017.2005-qqg.3.5af911d9pNWXru
NSLog(@"relativePath: %@", [url relativePath]); //相对路径 /markets/gmall/pc-index
NSLog(@"port :%@", [url port]); // 端口 (null)
NSLog(@"path: %@", [url path]); // 路径 /markets/gmall/pc-index
NSLog(@"Query:%@", [url query]); //查询字符串 spm=a21bo.2017.2005-qqg.3.5af911d9pNWXru
NSLog(@"parameterString参数字符串:%@",[url parameterString]);
NSLog(@"pathComponents:%@", [url pathComponents]);//路径组成:
// (
// "/",
// markets,
// gmall,
// "pc-index"
// )
2019-01-09 17:55:00.502918+0800 TESTDEMO[1339:333290] scheme:https
2019-01-09 17:55:00.503081+0800 TESTDEMO[1339:333290] host:www.taobao.com
2019-01-09 17:55:00.503147+0800 TESTDEMO[1339:333290] absoluteString:https://www.taobao.com/markets/gmall/pc-index?spm=a21bo.2017.2005-qqg.3.5af911d9pNWXru
2019-01-09 17:55:00.503212+0800 TESTDEMO[1339:333290] relativePath: /markets/gmall/pc-index
2019-01-09 17:55:00.503263+0800 TESTDEMO[1339:333290] port :(null)
2019-01-09 17:55:00.503318+0800 TESTDEMO[1339:333290] path: /markets/gmall/pc-index
2019-01-09 17:55:00.503371+0800 TESTDEMO[1339:333290] Query:spm=a21bo.2017.2005-qqg.3.5af911d9pNWXru
2019-01-09 17:55:00.503486+0800 TESTDEMO[1339:333290] parameterString参数字符串:(null)
2019-01-09 17:55:00.503966+0800 TESTDEMO[1339:333290] pathComponents:(
"/",
markets,
gmall,
"pc-index"
)
-
代码示例4
//打电话
NSString *str = [NSString stringWithFormat:@"telprompt://%@",@"02134134567"];
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:str]];
//发短信
NSString *str = [NSString stringWithFormat:@"sms://10086"];
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:str]];
//发邮件
NSString *str = [NSString stringWithFormat:@"mailto://12345@qq.com"];
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:str]];
- (BOOL)openURL:(NSURL*)url NS_DEPRECATED_IOS(2_0, 10_0, "Please use openURL:options:completionHandler: instead") NS_EXTENSION_UNAVAILABLE_IOS("");
iOS10以后这个方法被弃用了。用下面方法代替。
- (void)openURL:(NSURL*)url options:(NSDictionary<NSString *, id> *)options completionHandler:(void (^ __nullable)(BOOL success))completion NS_AVAILABLE_IOS(10_0) NS_EXTENSION_UNAVAILABLE_IOS("");
NSString *str = [NSString stringWithFormat:@"telprompt://%@",@"02134134567"];
NSDictionary *dict = [NSDictionary dictionary];
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:str] options:dict completionHandler:nil];
这个地方有个 options 参数 ,如果写 nil ,就会报警告 Null passed to a callee that requires a non-null argument,如下图,
是因为options不能为空,
__nullable
指代对象可以为NULL或者为NIL__nonnull
指代对象不能为null
当我们不遵循这一规则时,编译器就会给出警告。
相关文章:
错误收集:Null passed to a callee that requires a non-null argument