NSURL
とNSString
の間の変換に関するSO)に関する多くの質問を見てきました。それらはすべて、いずれかのNSString *path = [myURL absoluteString];
またはNSString *path = [myURL path];
。 これらの方法の実際の違いは何ですか?一方を他方に対して使用する必要があるときはありますか?Apple Docs を調べてみましたが、役に立たないことがわかりました。
私はURLがWebサイトに関する議論や異なるマシン間で情報を送信することに関する他のトピックでのみ言及されていることに慣れており、単一のマシン上のファイル構造だけを扱うときは決して言及されません。おそらく、これが私の混乱の原因です。なぜなら、ファイルがネットワーク上にあるかローカルデバイス上にあるかに関わらず、NSURL
がファイルにアクセスする好ましい方法であるようだからです。または、それはまったく無関係なトピックかもしれません。わからない。
これらの方法の実際の違いは何ですか?
6行のコード(3行はローカル、3行はhttp URL)を記述し、少し遊んでみましょう。
file://
スキームを使用してNSURL
を作成しましょう。 /
の後に3 file:
がある理由を自問する場合、スキームの完全なURL(file://
および絶対パスまたは相対パス)が存在することを覚えておく必要があります(URLの作成に関する詳細情報を参照できます) in RFC 1808ページ )。/
で始まる絶対パスを使用するため、最終的に///
になります。
NSURL *aLocalURL = [NSURL URLWithString:@"file:///Users/dennis/Desktop/"];
NSLog(@"absolute string: %@", aLocalURL.absoluteString);
NSLog(@"path: %@", aLocalURL.path);
出力:
絶対文字列:file:/// Users/dennis/Desktop /
パス:/ Users/dennis/Desktop
したがって、absoluteString
にはまだそのスキームがありますが、path
にはこの情報がありません。
注:path
はファイル(ディレクトリ)URLであり、 docs 状態であるため、末尾のスラッシュは削除されます。
次に、リモートURLを見てみましょう。これらのタイプのURLを使用すると、ほとんどの人はより馴染みのあるものになります。ローカルURLと同じ手順を使用して作成します。スキームはhttp://
になり、path
はwww.Apple.com/
になります。
NSURL *anHTTPURL = [NSURL URLWithString:@"http://www.Apple.com/"];
NSLog(@"absolute string: %@", anHTTPURL.absoluteString);
NSLog(@"path: %@", anHTTPURL.path);
出力:
絶対文字列: http://www.Apple.com/
パス:/
繰り返しますが、絶対文字列はまだそのスキームを知っていますが、path
は/
になりました。したがって、path
は、リモートURLで作業する場合の適切な方法ではないようです。
ただし、http://www.Apple.com/index.html
のようなURL
がある場合、
絶対文字列: http://www.Apple.com/index.html
パス:/index.html
ここでドキュメントを読むことも役立ちます:
RFC 3986により、権限(ホスト名とポート)部分の後の先頭のスラッシュはパスの一部として扱われます。
したがって、path
は、authority
の後のスラッシュで始まる(および含む)すべてであり、この場合はwww.Apple.com
です。
一方を他方に対して使用する必要がある場合はありますか?
docs から:(メソッド:path
)
このURLオブジェクトにファイルURL(isFileURLで決定)が含まれている場合、このメソッドの戻り値はNSFileManagerまたはNSPathUtilitiesのメソッドへの入力に適しています。
私の意見では、文はpath
またはNSFileManager
を使用するときはNSPathUtilities
を使用する必要があることをclearlyと述べています。
リモートURLを使用する場合、(一般的に)absoluteString
を使用します。そうしないと、結果は(一般的に)望んだものではありません。
ローカルURLを使用する場合は、path
を使用します。
ソース:
http://www.ietf.org/rfc/rfc1808.txt
http://www.ietf.org/rfc/rfc3986.txt
NSURLクラスリファレンス
HASの応答への追加-Appleのドキュメントでは、パスベースのURLはいくつかの点でよりシンプルであると述べていますが、ファイル参照URLには、ファイルが移動または名前変更されても参照が有効なままであるという利点がありますアプリの実行中。
「ファイルとディレクトリへのアクセス」のドキュメントから:
「パスベースのURLは操作が簡単で、デバッグが簡単で、NSFileManagerなどのクラスで一般的に好まれます。ファイル参照URLの利点は、アプリの実行中にパスベースのURLよりも壊れにくいことです。 Finderでファイルを移動すると、そのファイルを参照するパスベースのURLはすぐに無効になり、新しいパスに更新する必要がありますが、ファイルが同じディスク上の別の場所に移動する限り、その一意のIDは変更してもファイル参照URLはすべて有効です。」