2011-10-14 10 views
9

To nie jest pytanie o istotny problem. To jest pytanie, na podstawie którego staram się pogłębić wiedzę na temat Objective-C lub bardziej konkretnej Fundacji Kakao.Kiedy należy używać NSURL zamiast NSString i na odwrót?

Kiedy mam do czynienia z przesyłaniem i pobieraniem plików z serwera do moich aplikacji, ciągle jestem rozdarty między używaniem NSURL lub NSString dla wszystkich powiązanych ścieżek. Oczywiście, gdy istnieje już API, używam go zgodnie ze specyfikacją. Ale kiedy przechowuję własne ścieżki lub tworzę niestandardowe klasy, które sobie z nimi radzą, jestem zdezorientowany, który z nich byłby lepszym wyborem.

NSString jest używany wszędzie i ma wygodne metody, takie jak stringByAppendingPathComponent: i stringByAppendingPathExtension:. Mogę łatwo przekonwertować na NSURL, tworząc nową instancję z [NSURL URLWithString:@"string"] i na odwrót, wywołując [url path] na instancji NSURL. Ale różnica istnieje z jakiegoś powodu, prawda?

Moje zamieszanie rośnie, gdy patrzę na pliki nagłówkowe podobne do NSFileManager. Te dwie metody są dość blisko siebie:

- (BOOL)copyItemAtPath:(NSString *)srcPath toPath:(NSString *)dstPath error:(NSError **)error; 
- (BOOL)copyItemAtURL:(NSURL *)srcURL toURL:(NSURL *)dstURL error:(NSError **)error NS_AVAILABLE(10_6, 4_0); 

Dlaczego wybrałbym używać jednego nad drugim, zwłaszcza gdy konwersje między nimi są tak łatwo? I dlaczego Apple ma problemy z utworzeniem prawie identycznych interfejsów API do korzystania z obu typów danych?

Jeśli ktoś ma głębszy wgląd w to, kiedy używać NSURL zamiast NSString do własnych klas obsługi ścieżek plików i zdalnych adresów URL, proszę udostępnij! Twoje zdrowie.

+0

Co powiesz na odniesienia do plików w lokalnym systemie plików? – Jason

+0

Co masz na myśli? 'NSURL' ma [obszerny zestaw metod dotyczących adresów URL systemów plików] (https://developer.apple.com/library/mac/documentation/Cocoa/Reference/Foundation/Classes/NSURL_Class/Reference/Reference.html#//apple_ref/doc/uid/20000301-SW25). – epologee

+0

Tak samo jest z NSString. Wygląda na to, że NSURL jest na ogół preferowany, ale zastanawiam się, czy to samo dotyczy plików lokalnych. – Jason

Odpowiedz

3

Ogólnie na działania związane ścieżki powinny wolisz NSURL nad NSString ponieważ informacje ścieżka mogą być przechowywane bardziej efektywnie w NSURL (w zależności od klasy odniesienia dla NSFileManager). Polecam więc, aby w przypadku interfejsów API używał również NSURL.

także NSURL ma URLByAppendingPathComponent: i URLByAppendingPathExtension: więc wygoda serwowane jest dobrze :-)

+2

+1 Ponadto, nadchodzące reguły piaskownicy w sklepie Mac App Store wymagają uprawnień, które (jak rozumiem) są przechowywane w samym urządzeniu NSURL, co ułatwia archiwizowanie dostępu do systemu plików w celu późniejszego wykorzystania. –

8

NSUrl umie obsłużyć praktycznie każdy król adresów - nie tylko Web-adresy i dzieli go na łatwo dostępnych fragmentów:

  • protokół lub schemat (http, ftp, telnet, ssh)
  • podając nazwę użytkownika i hasło (na przykład dla ssh: ssh: // user: [email protected])
  • Nazwa hosta
  • portowe
  • ścieżka
  • parametry GET

Teraz można łatwo pyta URL obiekt za to kawałki, podczas gdy w łańcuchu może istnieć konieczność nadmiernego jeżeli przepisy lub skomplikowane regex.

+0

Dzięki za wyjaśnienie, +1. Musiałem wybrać kogo podać znak, a @applaudierend miał tam referencję. – epologee

Powiązane problemy