/ / Diferencia: crea instancias con métodos de clase o asignándoles valores devueltos - objetivo-c, clase-método

Diferencia: cree instancias con métodos de clase o asignándoles valores devueltos - objetivo-c, clase-método

solo una pequeña pregunta con una respuesta simple y corta, espero ;-)

¿Cuál es exactamente la diferencia entre (es decir)

NSData *htmlData = [NSURLConnection sendSynchronousRequest:self.request returningResponse:&response error:nil];

y

NSData *htmlData = [NSData dataWithData:[NSURLConnection sendSynchronousRequest:self.request returningResponse:&response error:nil]]

¿O no hay ninguna diferencia? Si es importante, sí uso ARC.

¡Muchas gracias!

Respuestas

2 para la respuesta № 1

No hay una respuesta simple y corta :)

En el primero, maneja los datos devueltos desde la conexión URL.

En el segundo, usted crea una copia de esa información; esa "copia" por cierto, puede no ser una copia profunda por varias razones.

Cómo funciona realmente puede ir ambos sentidosy muchas de ellas son difíciles de responder porque:

  • a) depende en gran medida de cómo su programa utiliza esa información y
  • b) optimizaciones internas y detalles de implementación de las API que está utilizando
  • c) copia o conserva la semántica de tus objetos

Personalmente, prefiero este último cuando necesito pasar esos datos. La razón es que debe declarar sus ivars para los tipos que tienen variantes mutables como copia (NSMutableData en este caso), y generalmente debería trabajar concopias inmutables de estos objetos cuando sea posible. Una vez que muchas de sus implementaciones manejan estos tipos con variantes mutables por copia, entonces usted puede en realidad reducir copiando asegurándose de que los objetos con los que tratas son de hecho inmutables; los objetos inmutables pueden evitar copias profundas e incluso superficiales cuando se solicita una copia.

Si esos datos no se pasan a ningún otro lugar, podría evitar una posible copia en caso de que la API devuelva una instancia de NSMutableData (es decir, puede usar el primero de forma segura).