2011-10-14 30 views
9

Esta no es una pregunta sobre un problema pertinente. Es una pregunta por la cual trato de profundizar mi comprensión de Objective-C o más específica Cocoa Foundation.¿Cuándo debería usar NSURL en lugar de NSString y viceversa?

Cuando se trata de cargar y descargar archivos de un servidor a mis aplicaciones, estoy constantemente dividido entre usar NSURL o NSString para todo lo relacionado con la ruta. Por supuesto, cuando hay una API existente, la utilizo de acuerdo con las especificaciones. Pero cuando almaceno mis propios caminos o creo clases personalizadas que tratan con ellos, me confundo cuál de los dos sería la mejor opción.

NSString se utiliza en todas partes y tiene métodos de conveniencia como stringByAppendingPathComponent: y stringByAppendingPathExtension:. Puedo convertir fácilmente a NSURL creando una nueva instancia con [NSURL URLWithString:@"string"] y al revés llamando al [url path] en una instancia de NSURL. Pero la diferencia está ahí por una razón, ¿verdad?

Mi confusión crece cuando veo los archivos de encabezado de algo así como NSFileManager. Estos dos métodos son bastante próximos entre sí:

- (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); 

qué iba a optar por utilizar uno sobre el otro, sobre todo cuando las conversiones entre los dos se hacen con tanta facilidad? ¿Y por qué Apple pasa por el problema de crear API casi idénticas para usar ambos tipos de datos?

Si alguien tiene una idea más profunda de cuándo usar NSURL en lugar de NSString para sus propias clases manejando rutas de archivos y direcciones URL remotas, ¡por favor comparta! Aclamaciones.

+0

¿Qué pasa cuando se hace referencia a los archivos en el sistema de archivos local? – Jason

+0

¿Qué quieres decir? 'NSURL' tiene un [amplio conjunto de métodos relacionados con las URL del sistema de archivos] (https://developer.apple.com/library/mac/documentation/Cocoa/Reference/Foundation/Classes/NSURL_Class/Reference/Reference.html#//apple_ref/doc/uid/20000301-SW25). – epologee

+0

Lo mismo ocurre con NSString. Parece que generalmente se prefiere NSURL, pero me pregunto si eso también se traslada a los archivos locales. – Jason

Respuesta

3

general para las operaciones relacionadas a la ruta se debe preferir NSURL sobre NSString debido a que la información de la ruta se puede almacenar de manera más eficiente en NSURL (según la referencia de clase para NSFileManager). Así que recomendaría que para sus API también use NSURL.

también tiene NSURLURLByAppendingPathComponent: y por lo URLByAppendingPathExtension: conveniencia se sirve así :-)

+2

+1 Además, las próximas reglas de sandboxing de Mac App Store requieren permisos, que (según tengo entendido) se almacenan en el propio NSURL, lo que facilita el archivo del acceso al sistema de archivos para su uso posterior. –

8

NSUrl sabe cómo manejar prácticamente cualquier rey de URLs - no sólo Web-direcciones y la divide en trozos de fácil acceso:

  • protocolo o esquema (http, ftp, telnet, ssh)
  • nombre de usuario y la contraseña (por ejemplo, para ssh: ssh: // usuario: [email protected])
  • Nombre de host
  • puerto
  • trayectoria
  • parámetros GET

ya se puede pide fácilmente la URL a objetos para este trozos, mientras que en una cadena que puede haber la necesidad de excesiva si las reglas o complicado regex's

+0

Gracias por aclarar, +1. Tuve que elegir a quién dar la marca, y @applaudierend tenía la referencia allí. – epologee

Cuestiones relacionadas