2011-06-23 17 views

Respuesta

1

La reutilización de objetos generalmente es una mala idea, generalmente intente que sus objetos sean lo más efímeros posible. Esto reduce el número de estados posibles de su código y facilita el razonamiento al respecto. ("¿De dónde vino este valor? ¿Tal vez es un residuo del uso de la instancia anterior?" Yuck). Solo rompa esta regla una vez que se encuentre con problemas mensurables.

Para leer más a lo largo de esta línea de pensamiento, puede navegar questions tagged “immutable”.

+13

Esta no es una respuesta a la pregunta de @ Fernando, y es una generalización excesiva. Hay muchos contextos en los que la reutilización de objetos es un mejor enfoque que la creación de objetos nuevos. –

+1

Creo que Christopher tiene razón. Es por motivos de rendimiento. Por ejemplo, la vista de tabla reutiliza las celdas existentes y Apple lo alienta explícitamente. Al menos usted había respondido a la pregunta de los carteles, "no hay forma de cambiar el archivo" como lo hizo Christopher. –

+0

La vista de tabla es un caso especial porque tiene que cumplir con los requisitos de rendimiento (desplazamiento). Pero, en general, el costo de rendimiento de una nueva construcción de objeto es bastante bajo en la actualidad y estoy de acuerdo con la afirmación de que es una mala idea reutilizar objetos hasta que se produzca un problema de rendimiento. – zoul

19

No hay API para pasar un archivo nuevo a una instancia existente de AVAudioPlayer. Sin embargo, la creación de AVAudioPlayer no es costosa, por lo que no debe preocuparse por el rendimiento, siempre que libere las instancias una vez que haya terminado con ellas.

Si tiene un conjunto fijo de sonidos que se reproducen entre sí, o es probable que se reproduzcan repetidamente, puede crear una instancia de AVAudioPlayer para cada sonido y volver a utilizar esas instancias llamando al play en la instancia correspondiente.

Si solo se reproduce un sonido a la vez, y está generando nuevos sonidos (por ejemplo, con texto a voz según la entrada del usuario), generalmente tengo un solo reproductor como propiedad. Cuando suena un nuevo sonido, llamo al [player stop], lanzo el reproductor anterior e instalo uno nuevo con el nuevo archivo de sonido.

+2

Sí, busqué en Google esta pregunta porque pensé que hacer muchos nuevos AVAudioPlayer causaría una degradación del rendimiento. Tu respuesta resuelve mis preguntas a la vez. 1) No hay forma de modificar el archivo en AVAudioPlayer 2) Crear AVAudioPlayer no es costoso. –

+0

esta debería ser la respuesta aceptada. – Herm

+0

¿Alguna sugerencia bajo ARC? – piperchester

Cuestiones relacionadas