NSURL

NSURL : NSObject

创建

    // 通用 URL string 创建
    NSURL *baseUrl = [NSURL URLWithString:@"http://www.test.com"];
    NSURL *url1 = [NSURL URLWithString:@"test.php?name=Li Lei" relativeToURL:baseUrl];
    
    // 文件 path 创建,还有几个少参数的略了,路径、文件夹、baseUrl
    NSString *path = [[NSBundle mainBundle] pathForResource:@"test" ofType:@"txt"];
    NSURL *url2 = [NSURL fileURLWithPath:path isDirectory:YES relativeToURL:nil];
    
    // cPath 创建
    const char *cPath = [path cStringUsingEncoding:NSUTF8StringEncoding];
    NSURL *url3 = [NSURL fileURLWithFileSystemRepresentation:cPath isDirectory:NO relativeToURL:nil];

    // dataURL 创建
    NSData *dataURL = [[NSString stringWithFormat:@"file://%@",path] dataUsingEncoding:NSUTF8StringEncoding];
    NSURL *url4 = [NSURL URLWithDataRepresentation:dataURL relativeToURL:nil];
    
    // 绝对 URL,暂时不知与上一个的区别在哪里
    NSURL *url5 = [NSURL absoluteURLWithDataRepresentation:dataURL relativeToURL:nil];

只举例类方法,实例方法一样就略了
注意 Path 与 URL 的区别(path 不带 传输协议)

属性

  • 不使用 baseURL,绝对路径
    NSURL *url = [NSURL URLWithString:@"http://www.test.com?a=1&b=2#123"];

    NSData *dataRepresentation = url.dataRepresentation;// dataURL(withString:处的data)
    const char *fileSystemRepresentation = url.fileSystemRepresentation;

    NSString *absoluteString = url.absoluteString;// http://www.test.com?a=1&b=2#123
    NSString *relativeString = url.relativeString;// http://www.test.com?a=1&b=2#123
    NSURL *baseURL = url.baseURL;// nil
    NSURL *absoluteURL = url.absoluteURL;// http://www.test.com?a=1&b=2#123
    
    NSString *scheme = url.scheme;// http
    NSString *resourceSpecifier = url.resourceSpecifier;// //www.test.com?a=1&b=2#123
    
    NSString *host = url.host;// www.test.com
    NSNumber *port = url.port;// nil
    NSString *user = url.user;// nil
    NSString *password = url.password;// nil
    NSString *path = url.path;// nil
    NSString *fragment = url.fragment;// 123
    NSString *parameterString = url.parameterString;// nil
    NSString *query = url.query;// a=1&b=2
    NSString *relativePath = url.relativePath;// ""
    BOOL hasDirectoryPath = url.hasDirectoryPath;// NO
    BOOL isFileURL = url.isFileURL;// NO

    NSURL *standardizedURL = url.standardizedURL;// http://www.test.com?a=1&b=2#123
    NSURL *filePathURL = url.filePathURL;// nil
  • 使用 baseURL,相对路径
    NSURL *baseUrl = [NSURL URLWithString:@"http://www.test.com"];
    NSURL *url = [NSURL URLWithString:@"?a=1&b=2#123" relativeToURL:baseUrl];
    
    NSData *dataRepresentation = url.dataRepresentation;// dataURL(withString:处的data)
    const char *fileSystemRepresentation = url.fileSystemRepresentation;

    NSString *absoluteString = url.absoluteString;// http://www.test.com?a=1&b=2#123
    NSString *relativeString = url.relativeString;// ?a=1&b=2#123
    NSURL *absoluteURL = url.absoluteURL;// http://www.test.com?a=1&b=2#123
    
    NSString *scheme = url.scheme;// http
    NSString *resourceSpecifier = url.resourceSpecifier;// //www.test.com?a=1&b=2#123
    
    NSString *host = url.host;// www.test.com
    NSNumber *port = url.port;// nil
    NSString *user = url.user;// nil
    NSString *password = url.password;// nil
    NSString *path = url.path;// ""
    NSString *fragment = url.fragment;// 123
    NSString *parameterString = url.parameterString;// nil
    NSString *query = url.query;// a=1&b=2
    NSString *relativePath = url.relativePath;// path
    BOOL hasDirectoryPath = url.hasDirectoryPath;// NO
    BOOL isFileURL = url.isFileURL;// NO

    NSURL *standardizedURL = url.standardizedURL;// ?a=1&b=2#123 -- http://www.test.com
    NSURL *filePathURL = url.filePathURL;// nil

资源操作

    id resdata;
    BOOL res2 = [url getResourceValue:&resdata forKey:NSURLNameKey error:nil];
    NSDictionary *dic = [url resourceValuesForKeys:@[NSURLNameKey] error:nil];
    
    BOOL res3 = [url setResourceValue:@"v" forKey:NSURLNameKey error:nil];
    BOOL res4 = [url setResourceValues:@{NSURLNameKey:@"v2"} error:nil];
    
    [url removeCachedResourceValueForKey:NSURLNameKey];
    [url removeAllCachedResourceValues];
    [url setTemporaryResourceValue:@"vv" forKey:NSURLNameKey];

并不是很会用,唉;

FOUNDATION_EXPORT NSURLResourceKey const NSURLKeysOfUnsetValuesKey;// 未定义的 key
其他定义了非常多的 NSURLResourceKey,此处略了;
NSURLFileResourceType   类型枚举
NSURLThumbnailDictionaryItem 缩略图?
NSURLFileProtectionType 保护机制枚举
NSURLUbiquitousItemDownloadingStatus    下载状态枚举
NSURLUbiquitousSharedItemRole   分享规则?
NSURLUbiquitousSharedItemPermissions 分享读写属性?

NSURLBookmarkCreationOptions    书签
NSURLBookmarkResolutionOptions 书签读取规则?

书签

瞬间爆炸,看的头疼,放以下 API 自我安慰。

- (nullable NSData *)bookmarkDataWithOptions:(NSURLBookmarkCreationOptions)options includingResourceValuesForKeys:(nullable NSArray<NSURLResourceKey> *)keys relativeToURL:(nullable NSURL *)relativeURL error:(NSError **)error;

- (nullable instancetype)initByResolvingBookmarkData:(NSData *)bookmarkData options:(NSURLBookmarkResolutionOptions)options relativeToURL:(nullable NSURL *)relativeURL bookmarkDataIsStale:(BOOL * _Nullable)isStale error:(NSError **)error; 

+ (nullable instancetype)URLByResolvingBookmarkData:(NSData *)bookmarkData options:(NSURLBookmarkResolutionOptions)options relativeToURL:(nullable NSURL *)relativeURL bookmarkDataIsStale:(BOOL * _Nullable)isStale error:(NSError **)error; 

+ (nullable NSDictionary<NSURLResourceKey, id> *)resourceValuesForKeys:(NSArray<NSURLResourceKey> *)keys fromBookmarkData:(NSData *)bookmarkData;

+ (BOOL)writeBookmarkData:(NSData *)bookmarkData toURL:(NSURL *)bookmarkFileURL options:(NSURLBookmarkFileCreationOptions)options error:(NSError **)error;

+ (nullable NSData *)bookmarkDataWithContentsOfURL:(NSURL *)bookmarkFileURL error:(NSError **)error;

+ (nullable instancetype)URLByResolvingAliasFileAtURL:(NSURL *)url options:(NSURLBookmarkResolutionOptions)options error:(NSError **)error;

- (BOOL)startAccessingSecurityScopedResource;

- (void)stopAccessingSecurityScopedResource;

常量

FOUNDATION_EXPORT NSString *NSURLFileScheme;// file

拓展 NSPromisedItems

- (BOOL)getPromisedItemResourceValue:(id _Nullable * _Nonnull)value forKey:(NSURLResourceKey)key error:(NSError **)error;

- (nullable NSDictionary<NSURLResourceKey, id> *)promisedItemResourceValuesForKeys:(NSArray<NSURLResourceKey> *)keys error:(NSError **)error;

- (BOOL)checkPromisedItemIsReachableAndReturnError:(NSError **)error;

拓展 NSURLPathUtilities

文件专用拓展

    NSArray *arr = @[@"aa", @"nn", @"test.txt"];
    
    NSURL *url = [NSURL fileURLWithPathComponents:arr];
    
    NSArray *arr2 = url.pathComponents;// 组件数组
    NSString *las = url.lastPathComponent;// test.txt
    NSString *pae = url.pathExtension;// txt
    
    NSURL *u = url.URLByDeletingLastPathComponent;// 删除最后一个组件
    NSURL *u2 = url.URLByDeletingPathExtension;// 删除文件后缀
    NSURL *u3 = url.URLByStandardizingPath;// 格式化? file:///aa/nn/test.txt
    NSURL *u4 = url.URLByResolvingSymlinksInPath;// 格式化? file:///aa/nn/test.txt

    [url URLByAppendingPathComponent:@"111" isDirectory:YES];// 添加组件
    [url URLByAppendingPathExtension:@"222"];// 添加文件后缀