Ответ 1
Вопрос 1:
Какова фактическая разница между этими методами?
Проанализируйте эту запись 6 строк кода - 3 для локального и 3 для URL-адреса http - и немного поиграйте с ними.
Создайте NSURL
с помощью схемы file://
. Если вы спросите себя, почему существует 3 /
после file:
, вы должны помнить, что существует полный URL-адрес схемы (file://
и абсолютный или относительный путь (вы можете найти дополнительную информацию о создании URL-адресов в RFC 1808 на стр. 3). Мы используем абсолютный путь, начинающийся с /
, чтобы в итоге получилось ///
.
NSURL *aLocalURL = [NSURL URLWithString:@"file:///Users/dennis/Desktop/"];
NSLog(@"absolute string: %@", aLocalURL.absoluteString);
NSLog(@"path: %@", aLocalURL.path);
Вывод:
абсолютная строка: файл:///Пользователи/dennis/Рабочий стол/
путь:/Пользователи/dennis/Рабочий стол
Итак, мы видим, что 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-адресами.
Однако, когда мы имеем URL
как http://www.apple.com/index.html
, получим
Абсолютная строка: http://www.apple.com/index.html
путь:/index.html
Чтение документов также помогает:
В RFC 3986 ведущая косая черта после части полномочий (имя узла и порта) рассматривается как часть пути.
Итак, path
- это все, что начинается (и включает) в косой черте после authority
, которая www.apple.com
в нашем случае.
Вопрос 2
Есть ли время, когда нужно использовать другое?
Из документов: (метод: path
)
Если этот URL-адрес содержит URL-адрес файла (как определено с помощью isFileURL), возвращаемое значение этого метода подходит для ввода в методы NSFileManager или NSPathUtilities.
По моему мнению, в предложении четко указано, что вы должны использовать path
при работе с NSFileManager
или NSPathUtilities
.
Вывод:
Когда вы работаете с удаленными URL-адресами, вы (обычно) используете absoluteString
, иначе результат не тот, который вам (как правило) нужен.
Когда вы работаете с локальными URL-адресами, используйте path
.
Источники:
http://www.ietf.org/rfc/rfc1808.txt
http://www.ietf.org/rfc/rfc3986.txt
Ссылка на класс NSURL