development

NSURL 경로와 absoluteString

big-blog 2020. 12. 7. 20:13
반응형

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://이고 우리 pathwww.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당신이 작업을 할 때 NSFileManagerNSPathUtilities.


결론:

원격 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."

https://developer.apple.com/library/content/documentation/FileManagement/Conceptual/FileSystemProgrammingGuide/AccessingFilesandDirectories/AccessingFilesandDirectories.html

참고URL : https://stackoverflow.com/questions/16176911/nsurl-path-vs-absolutestring

반응형