iOS官方文档 Foundation篇---URLs

人生就像品茗,懂得吃苦,才能回甘啊。

————鷇音子

NSURL

表示资源位置的对象,例如远程服务器上的项目或本地文件的路径;

NSBURL结构

一个NSURL对象是由两个部分组成,一个是基础URL和相对于基础URL解析的字符串。如果NSURL对象的字符串部分在没有基础URL的情况下完全解析,则该对象所有其他URL都被认为是相对的。

NSURL *baseURL = [NSURL fileURLWithPath:@"file:///path/to/user/"];
NSURL *URL = [NSURL URLWithString:@"folder/file.html" relativeToURL:baseURL];
NSLog(@"absoluteURL = %@", [URL absoluteURL]); // file:///path/to/user/folder/file.html

完整url的构成:
https://johnny:p4ssw0rd@www.example.com:443/script.ext;param=value?query=value#ref

scheme user password host port path pathExtension pathComponents parameterString query fragment
https johnny p4ssw0rd www.example.com 443 /script.ext ext ["/", "script.ext"] param=value query=value ref

– absoluteString – absoluteURL – baseURL – fileSystemRepresentation – fragment – host –lastPathComponent – parameterString – password – path – pathComponents – pathExtension – port– query – relativePath – relativeString – resourceSpecifier – scheme – standardizedURL – user

创建NSURL对象
//创建并返回使用提供的URL字符串初始化的NSURL对象
+ (nullable instancetype)URLWithString:(NSString *)URLString;

//创建并返回使用BaseURL和URLString初始化的NSURL对象
+ (nullable instancetype)URLWithString:(NSString *)URLString relativeToURL:(nullable NSURL *)baseURL;

//初始化并将新创建的NSURL对象作为具有指定路径的文件URL返回
+ (NSURL *)fileURLWithPath:(NSString *)path;

/**
 初始化并将新创建的NSURL对象作为具有指定路径的文件URL返回
 
 @param path:有效的系统路径
 @param isDir :YES:path表示目录,NO:path表示文件。

 @return NSURL  路径
 */
+ (NSURL *)fileURLWithPath:(NSString *)path isDirectory:(BOOL)isDir;

+ (NSURL *)fileURLWithPath:(NSString *)path relativeToURL:(nullable NSURL *)baseURL;

+ (NSURL *)fileURLWithPath:(NSString *)path isDirectory:(BOOL) isDir relativeToURL:(nullable NSURL *)baseURL;


- (nullable instancetype)initWithString:(NSString *)URLString;
- (nullable instancetype)initWithString:(NSString *)URLString relativeToURL:(nullable NSURL *)baseURL;
- (instancetype)initFileURLWithPath:(NSString *)path;
- (instancetype)initFileURLWithPath:(NSString *)path isDirectory:(BOOL)isDir;
- (instancetype)initFileURLWithPath:(NSString *)path relativeToURL:(nullable NSURL *)baseURL; 
- (instancetype)initFileURLWithPath:(NSString *)path isDirectory:(BOOL)isDir relativeToURL:(nullable NSURL *)baseURL;
NSString *filePath = @"/Users/calabashBoy/Desktop/name.plist";
NSString *fileURL = @"file:///Users/calabashBoy/Desktop/name.plist";
NSURL *url = [NSURL URLWithString: fileURL];//    url = file:///Users/calabashBoy/Desktop/name.plist
NSURL *url = [NSURL URLWithString:filePath];// url = /Users/calabashBoy/Desktop/name.plist
NSURL *url = [NSURL fileURLWithPath:fileURL];// url = file:///Users/calabashBoy/Desktop/name.plist
NSURL *url = [NSURL fileURLWithPath:filePath];// url = file:///Users/calabashBoy/Desktop/name.plist
NSURL *url = [NSURL fileURLWithPath:filePath isDirectory:NO];

BOOL isEqual = [url isEqual:url];//判断两个url是否相同
BOOL isFileURL = [url9 isFileURL];//是否是文件URL
BOOL isFileReferenceURL = [url9 isFileReferenceURL]//是否是文件引用URL
BOOL isFileReferenceURL = [url9 checkResourceIsReachableAndReturnError:nil];//是否可以访问文件URL指向的资源
访问URL的各部分
NSURL *url = [NSURL URLWithString:@"https://johnny:p4ssw0rd@www.example.com:443/script.ext;param=value?query=value#ref"];
NSString *absoluteStr = url.absoluteString;
NSURL *absoluteUrl = url.absoluteURL;
NSURL *baseUrl = url.baseURL;
//包含URL的文件系统路径字符串
const char *fileSystemRepresentation = url9.fileSystemRepresentation;// "/script.ext"
//标识符
NSString *fragment = url.fragment;//ref
//主机
NSString *host = url.host;// www.example.com
//最后一个路径组件
NSString *lastPathComponent = url.lastPathComponent;//script.ext
//参数字符串
NSString *parameterString = url.parameterString;//param=value
//密码
NSString *password = url.password;//p4ssw0rd
//路径
NSString *path = url.path;//    /script.ext
//路径组件数组
NSArray *pathComponents = url.pathComponents;// (/,script.ext)
//路径扩展
NSString *pathExtension = url.pathExtension;//ext
//端口
NSNumber *port = url.port;//443
//查询字符串
NSString *query = url.query;//query=value
//相对路径
NSString *relativePath = url.relativePath;///script.ext
//URL的相对部分的字符串
NSString *relativeString = url.relativeString;
//资源说明符
NSString *resourceSpecifier = url.resourceSpecifier;//   //johnny:p4ssw0rd@www.example.com:443/script.ext;param=value?query=value#ref
NSString *scheme = url.scheme;//https
NSURL *standardizedURL = url.standardizedURL;
//用户名
NSString *user = url.user;//johnny
修改URL

//添加路径组件
- (nullable NSURL *)URLByAppendingPathComponent:(NSString *)pathComponent;

//添加路径组件,组件指定目录时使用尾部斜杠
- (nullable NSURL *)URLByAppendingPathComponent:(NSString *)pathComponent isDirectory:(BOOL)isDirectory;

//添加路径扩展名
- (nullable NSURL *)URLByAppendingPathExtension:(NSString *)pathExtension;

//删除最后一个路径组件
@property (nullable, readonly, copy) NSURL *URLByDeletingLastPathComponent;

//删除路径扩展
@property (nullable, readonly, copy) NSURL *URLByDeletingPathExtension;

//删除所有缓存的资源值和临时资源值。
- (void)removeAllCachedResourceValues;

NSURL *url = [NSURL URLWithString:@"https://johnny:p4ssw0rd@www.example.com:443/script.ext;param=value?query=value#ref"];
NSURL *filePathURL = [url filePathURL];
NSURL *fileReferenceURL = [url fileReferenceURL];

// 添加路径组件
// https://ajohnny:p4ssw0rd@www.example.com:443/script.ext/com;param=value?query=value#ref
NSURL *appendPathComponentURL = [url URLByAppendingPathComponent:@"com"];

// 添加路径组件,组件指定目录时使用尾部斜杠
// https://ajohnny:p4ssw0rd@www.example.com:443/script.ext/com/;param=value?query=value#ref
NSURL * appendPathComponentISDirURL = [url URLByAppendingPathComponent:@"com" isDirectory:YES];

// 添加路径扩展名
// https://ajohnny:p4ssw0rd@www.example.com:443/script.ext.text;param=value?query=value#ref
NSURL *appendPathExtURL = [url URLByAppendingPathExtension:@"text"];

// 删除最后一个路径组件
// https://ajohnny:p4ssw0rd@www.example.com:443/;param=value?query=value#ref
NSURL *deletLastPathComponentURL= [url URLByDeletingLastPathComponent];

// 删除路径扩展
// https://ajohnny:p4ssw0rd@www.example.com:443/script;param=value?query=value#ref
NSURL *deletePathExtensionURL = [url URLByDeletingPathExtension];

// 使用绝对路径指向与原始URL相同的资源的URL
// https://ajohnny:p4ssw0rd@www.example.com:443/script.ext;param=value?query=value#ref
NSURL *standardizingPathURL = [url URLByStandardizingPath];

//删除所有缓存
[url removeAllCachedResourceValues];

NSURLComponents

NSURLComponents 是一个用于解析和构建 URL 的类,
通过 NSURLComponents 可以单独修改 URL 的某一部分,获取某一部分编码后的值;

// 通过传入的 URLString 创建
+ (nullable instancetype)componentsWithString:(NSString *)URLString;

//通过传入的 url 创建,resolve 是否解析 url 的 baseURL
+ (nullable instancetype)componentsWithURL:(NSURL *)url resolvingAgainstBaseURL:(BOOL)resolve;

- (nullable instancetype)initWithString:(NSString *)URLString;
- (nullable instancetype)initWithURL:(NSURL *)url resolvingAgainstBaseURL:(BOOL)resolve;

NSURLQueryItem

URL查询URL的单个名称/值对;

创建NSURLQueryItem
- (instancetype)initWithName:(NSString *)name value:(nullable NSString *)value;
+ (instancetype)queryItemWithName:(NSString *)name value:(nullable NSString *)value;
NSURLQueryItem *item = [NSURLQueryItem queryItemWithName:@"key" value:@"value"];
item.name;//key
item.value;//value

非常优秀的简书内容:
https://www.jianshu.com/p/38f5f53dfbad

欢迎留言指正,会持续更新。。。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,921评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,635评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,393评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,836评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,833评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,685评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,043评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,694评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,671评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,670评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,779评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,424评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,027评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,984评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,214评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,108评论 2 351
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,517评论 2 343