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"];// 添加文件后缀