2012-01-02 4 views
5

Conozco los conceptos básicos de la administración de la memoria, pero no los aspectos internos de cómo iOS maneja los diferentes tipos de datos. Algo siempre me fastidia que es mejor usar un NSData contra NSMutableData o NSString en lugar de un NSMutableString. ¿Hay realmente alguna diferencia de rendimiento a menos que el código se ejecute en un bucle de 10k o estoy perdiendo el tiempo?Merece la pena convertir NSMutable <T> a NS <T>

Respuesta

3

Utilice los tipos de mutables en los que desee poder cambiar los contenidos en su lugar. Use los tipos inmutables de lo contrario.

En algunos casos, no tiene otra opción, como el objeto de datos que contiene los datos devueltos de una solicitud NSURL: Usar un objeto de datos mutable es mucho más fácil que crear muchos tipos de datos inmutables y unirlos al final.

Después de eso, ejecute su código a través del generador de perfiles y vea si debe hacer algo diferente. es decir, si la sobrecarga de crear nuevos tipos inmutables para contener objetos es más eficiente que usar un tipo mutable. Cualquier otra cosa es una optimización prematura.

+0

Estoy hablando de cuando tengo datos que he estado manipulando en un método y lo estoy pasando de nuevo a otro. – Echilon

+0

@Echilon Como ya he dicho, depende de lo que esté haciendo. Si el método al que está devolviendo los datos necesita modificarlo en su lugar, devuelva un objeto mutable. Personalmente, tiendo a mantener mis tipos de datos inmutables cuando los paso por ahí. Prefiero los tipos inmutables para las propiedades tanto como sea posible. Mantiene las cosas mucho más seguras para los hilos, y en los casos en que los valores se obtienen de distintos lugares, hace que la depuración sea más fácil. los clústeres de clases mutables/inmutables tienen los métodos 'copy' y' mutableCopy' que son muy útiles para esto. – Abizern

+1

La primera oración aquí es la clave: piense qué quiere hacer con los datos. Si necesita ser mutable, entonces hazlo mutable. –

0

Como dijo, solo vale la pena si llama a usar Mutable muchas veces. Pero si lo llamas solo unas pocas veces, esto no es ningún problema.

Deberías pensar en alternativas, por ej. en un método TableViews cellForRowAtIndexPath: más grande. Use [NSString stringWithFormat:@"%@%@", fristString, secondString], en lugar de *foo = [[NSMutableString alloc] init] y [foo append:firstString] y así sucesivamente.

+0

TableView como ejemplo no parece tener mucho sentido debido al almacenamiento en caché y la reutilización de celdas y la representación de celdas solo visibles. – vikingosegundo

+0

No, en absoluto, lo que menciono si construye la Cadena que debería mostrarse a través de NSMutableString. –

+0

No entiendo tu punto. La vista de tabla se altera solo una vez por runloop, por lo que no es muy frecuente. – vikingosegundo

Cuestiones relacionadas