2011-06-23 5 views

Odpowiedz

1

Ponowne używanie obiektów to zwykle zły pomysł, ogólnie postaraj się, aby obiekty były jak najkrótsze. Zmniejsza to liczbę możliwych stanów kodu i ułatwia rozumowanie. ("Skąd wzięła się ta wartość? Może to pozostało z użycia poprzedniej instancji?" Yuck.) Przerywaj tę regułę tylko wtedy, gdy napotkasz na wymierne problemy.

Aby zapoznać się z tym artykułem, możesz przejrzeć questions tagged “immutable”.

+13

To nie jest odpowiedź na pytanie @ Fernando i jest nadmiernym uogólnieniem. Istnieje wiele kontekstów, w których ponowne wykorzystanie obiektu jest lepszym rozwiązaniem niż tworzenie nowego obiektu. –

+1

Myślę, że Christopher ma rację. To ze względu na wydajność. Na przykład widok tabeli ponownie wykorzystuje istniejące komórki, a firma Apple wyraźnie je zachęca. Przynajmniej odpowiedziałeś na pytanie o plakaty: "nie ma sposobu na zmianę pliku" tak jak Christopher. –

+0

Widok tabeli jest szczególnym przypadkiem, ponieważ musi spełniać twarde wymagania wydajności (przewijanie). Generalnie jednak koszt wydajności budowy nowego obiektu jest dziś dość niski i stoję na stanowisku, że ponowne wykorzystanie obiektów do złego działania jest złym pomysłem. – zoul

19

Nie ma interfejsu API do przekazania nowego pliku do istniejącej instancji AVAudioPlayer. Jednak tworzenie AVAudioPlayer nie jest drogie, więc nie powinieneś martwić się o wydajność, o ile zwolnisz instancje, gdy skończysz.

Jeśli masz ustalony zestaw dźwięków, które odtwarzają się nawzajem lub które mogą być odtwarzane wielokrotnie, możesz utworzyć jedną instancję AVAudioPlayer dla każdego dźwięku i ponownie użyć tych instancji, wywołując play na odpowiedniej instancji.

Jeśli jednocześnie odtwarzany jest tylko jeden dźwięk i generowane są nowe dźwięki (na przykład w przypadku zamiany tekstu na mowę na podstawie danych wprowadzonych przez użytkownika), zazwyczaj jako właściwość ma jednego gracza. Kiedy odtwarzany jest nowy dźwięk, dzwonię pod numer [player stop], zwalniam starego odtwarzacza i tworzę nowy z nowym plikiem dźwiękowym.

+2

Tak, szukałem w Google tego pytania, ponieważ uważałem, że zrobienie nowego AVAudioPlayera może spowodować pogorszenie wydajności. Twoja odpowiedź natychmiast rozwiązuje moje pytania. 1) Nie ma możliwości modyfikacji pliku w AVAudioPlayer 2) Tworzenie AVAudioPlayer nie jest drogie. –

+0

to powinna być zaakceptowana odpowiedź. – Herm

+0

Wszelkie sugestie w ramach ARC? – piperchester