- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我长期以来一直在使用 +[NSURL fileURLWithPath:]
因为它很方便,但在分析中我发现这是瓶颈的根源,因为它在调用 + 之前会查询文件系统[NSURL fileURLWithPath:isDirectory:]
(或 Core Foundation 等效项):
This method assumes that
path
is a directory if it ends with a slash. Ifpath
does not end with a slash, the method examines the file system to determine ifpath
is a file or a directory. Ifpath
exists in the file system and is a directory, the method appends a trailing slash. Ifpath
does not exist in the file system, the method assumes that it represents a file and does not append a trailing slash.
如果可能的话,我想避免这种开销。但我并不总是提前知道我正在构建的 URL 是否是一个目录。例如,我可能只得到一个路径,或者我可能得到一个目录和其中的项目(未知类型)的名称。我的问题是,即使结果可能不准确,也可以始终为 isDirectory
传递 NO
吗?
特别是,我想确保这不会弄乱 -[NSURL getResourceValue:forKey:error:]
和 NSFileManager
。
一些基本测试并未显示此优化有任何不良后果,但这并不意味着没有任何不良后果。我并不完全清楚为什么 NSURL
首先关心 isDirectory
。看着CFURL source ,代码似乎试图确保目录路径始终以斜杠结尾。但是,除了用于显示目的之外,我不清楚为什么这对文件系统路径很重要。 (使用 NSString
表示路径时,这从来都不是问题。)+[NSURL fileURLWithPath:isDirectory:]
的文档说 isDir
是:
A Boolean value that specifies whether
path
is treated as a directory path when resolving against relative path components. PassYES
if the path indicates a directory,NO
otherwise.
事实上,如果我使用 -[NSURL initWithString:relativeToURL:]
,新 URL 不包含 baseURL
的最后一个组件,除非它是使用 创建的YES
表示 isDirectory
。但是,我认为我从未调用过此方法,而且系统似乎不需要代表我这样做(对于上述用例)。我注意到 -[NSURL URLByAppendingPathComponent:]
在必要时插入斜杠,而不是假设 IS_DIRECTORY
标志是正确的。那么,除了创建相对 URL 之外,这个标志还重要吗?即使我愿意,在一般情况下似乎也不可能始终传递正确的值。文件系统总是可以在我的控制下发生变化。如果我使用 +[NSURL fileURLWithPath:]
,系统也无法始终确定它,因为文件系统中可能尚不存在该路径。
最佳答案
如果您传入 NO
并始终创建非目录 URL,那么对于使用 URL 访问文件系统的任何例程来说绝对没问题(例如 -getResourceValue:forKey:error:
或 NSFileManager
)。
对于文件
URL,只有当您想要针对该 URL 解析路径时,尾部斜杠才真正变得重要。即这个片段:
NSURL *baseURL = [NSURL fileURLWithPath:path isDirectory:YES];
NSURL *result = [NSURL URLWithString:@"relative/path" relativeToURL:baseURL];
将产生与此不同的结果:
NSURL *baseURL = [NSURL fileURLWithPath:path isDirectory:NO];
NSURL *result = [NSURL URLWithString:@"relative/path" relativeToURL:baseURL];
实际上,处理文件
URL 的相对字符串/路径往往并不常见。远程 URL 更需要它(当然取决于您的应用程序的用途!)
关于macos - isDirectory 参数是否为 +[NSURL fileURLWithPath :isDirectory:] need to be correct?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18665370/
方法 -isFileReferenceURL 是在 NSURL 类上定义的,但我不知道这个方法是什么。我认为这决定了 URL 是否指向实际文件,但事实并非如此。即使文件存在,它也会返回NO。手册上说只
给定一个本地 URL 地址,例如 index.html 现在我需要使用UIWebView在iPad中加载它。我按照以下步骤操作: 创建 NSURL NSURL *url = [NSURL fileUR
我正在尝试将 NSString(文档目录中文件的路径)转换为 NSURL,但 NSURL 始终为空。这是我的代码: NSURL *urlToPDF = [NSURL URLWithString:app
我有一个将属性定义为 NSURL 的对象: @interface fcpElement : NSObject @property (copy) NSString* elementName; @prop
我正在尝试使用 swift 和 firebase 构建聊天应用程序并收到此错误:下面是代码:我仍然不明白哪里出了问题!!我也在使用 JSQMessageViewController。 func sen
我尝试将 deviceToken 附加到 webView loadRequest 之前的 URL,以便我可以使用 GET 值PHP 脚本。我的问题是,保存 deviceToken 值的函数 didFa
我有 2 个 [NSURL] 数组,它们具有相同的元素,但顺序不同。我正在尝试使用 array1 的索引路径来获取成员,并在另一个数组中检测成员的索引路径。 我不知道我是否可以检测到成员在 NSURL
我有一个文件(假设是一个 PDF)存储在我的 macOS Cocoa 应用程序的磁盘上。我有包含此文件路径的 NSURL。 我目前正在使用 NSView 向用户显示此文件存在,其中包含一个显示文件名的
我为 Swift 2 升级了我的代码,这里出现错误: 无法使用 (fileURLWithPath: NSURL) 类型的参数列表调用类型 NSURL 的初始化程序 代码如下: let dirP
我正在尝试将 NSURL * _Nullable 转换为不可为空。你们有没有人知道我该怎么做? 这里是一些上下文: 我正在尝试使用 ios-oauthconsumer ,我正在尝试初始化一些对象: s
我最近在比较两个 NSURL 并将一个 NSURL 与 NSString(这是一个 URL 地址)进行比较时遇到了一个问题,情况是我从某个地方得到了一个 NSURLRequest,我可能知道也可能不知
我必须解析一个 JSON API 的返回,我已将 URL 转换为一个字符串,然后我将它传递给 NSURL,但在 NSLog 中它显示为 nil。这是我的代码, NSString *urlstring=
我有一个名为 downloadedPhotoURLs 的变量,其类型为 [NSURL]?。 我正在尝试分配返回类型 [NSURL] 的函数的结果(非可选)。 我在分配时解开变量downloadedPh
我有一个网址 http://www.hdwallpapers.in/walls/honda_v4_concept_widescreen_bike-wide.jpg 我要提取的文件名为“honda_v4
我有一个 NSURL: 服务器调用?x=a&y=b&z=c 获取 y 值最快、最有效的方法是什么? 谢谢 最佳答案 更新: 自 2010 年撰写本文以来,Apple 似乎已经为此目的发布了一套工具。请
我在 SO 上看到了很多关于 NSURL 和 NSString 之间转换的问题。它们都涉及使用 NSString *path = [myURL AbsoluteString]; 或 NSString
-[NSURL startAccessingSecurityScopedResource] 状态的文档: You must balance every call to the startAccessi
我在 SO 上看到了很多关于 NSURL 和 NSString 之间转换的问题。它们都涉及使用 NSString *path = [myURL AbsoluteString]; 或 NSString
我在 SO 上看到了很多关于 NSURL 和 NSString 之间转换的问题。它们都涉及使用 NSString *path = [myURL AbsoluteString]; 或 NSString
我在 SO 上看到了很多关于 NSURL 和 NSString 之间转换的问题。它们都涉及使用 NSString *path = [myURL AbsoluteString]; 或 NSString
我是一名优秀的程序员,十分优秀!