NSURL 경로와 absoluteString
NSURL
과 사이의 변환 과 관련하여 SO에 대한 많은 질문을 보았습니다 NSString
. 모두 NSString *path = [myURL absoluteString];
또는 NSString *path = [myURL path];
. 이 방법의 실제 차이점은 무엇입니까? 하나를 다른 것보다 사용해야 할 때가 있습니까? Apple Docs를 참조 해 보았지만 도움이되지 않았습니다.
나는 URL이 웹 사이트에 관한 토론과 다른 컴퓨터 사이의 정보 전송과 관련된 다른 주제에서만 언급되는 데 익숙하며 단일 컴퓨터의 파일 구조 만 다룰 때는 언급되지 않았습니다. 아마도 이것은 NSURL
파일이 네트워크에 있든 로컬 장치에 있든 관계없이 파일에 액세스하는 데 선호되는 방법 인 것처럼 보이기 때문에 혼란의 일부 가 발생한 곳일 것입니다. 아니면 전혀 관련이없는 주제 일 수도 있습니다. 확실하지 않습니다.
질문 1:
이 방법의 실제 차이점은 무엇입니까?
6 줄의 코드 (로컬 용 3 줄, http URL 용 3 줄)를 작성하고이를 약간 가지고 놀아 분석해 봅시다.
스키마를 NSURL
사용하여 생성 해 봅시다 file://
. 당신이 3이 왜 자신을 요구하는 경우에 /
후 file:
당신이 완전한 URL이 제도의 존재 (있음을 유의 file://
하고 절대 또는 상대 경로 (당신이 URL을 만드는 방법에 대한 자세한 정보를 찾을 수 3 페이지 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이며 문서 상태로 후행 슬래시가 제거됩니다.
이제 원격 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
.
Sources:
http://www.ietf.org/rfc/rfc1808.txt
http://www.ietf.org/rfc/rfc3986.txt
NSURL Class Reference
Adding to HAS' response -- the Apple docs mention that Path-based URLs are simpler in some ways, however file reference URLs have the advantage that the reference remains valid if the file is moved or renamed while your app is running.
From the documentation for "Accessing Files and Directories":
"Path-based URLs are easier to manipulate, easier to debug, and are generally preferred by classes such as NSFileManager. An advantage of file reference URLs is that they are less fragile than path-based URLs while your app is running. If the user moves a file in the Finder, any path-based URLs that refer to the file immediately become invalid and must be updated to the new path. However, as long as the file moved to another location on the same disk, its unique ID does not change and any file reference URLs remain valid."
참고URL : https://stackoverflow.com/questions/16176911/nsurl-path-vs-absolutestring
'development' 카테고리의 다른 글
SQL의 여러 내부 조인을 LINQ로 어떻게 변환합니까? (0) | 2020.12.07 |
---|---|
SCM에서 Maven 프로젝트 확인-커넥터 없음 (0) | 2020.12.07 |
here-document에서 '예기치 않은 파일 끝'오류가 발생합니다. (0) | 2020.12.07 |
Python 3은 값을 기준으로 dict를 정렬합니다. (0) | 2020.12.07 |
collectstatic을 수행 할 수 없습니다. (0) | 2020.12.07 |