2013-03-06 10 views
8

Mam obraz o nazwie [email protected]. Plik ma rozmiar 1KB. Moja aplikacja to aplikacja przeznaczona wyłącznie dla iPhone'a.iOS: czy użycie [UIImage -imageNamed:] bez rozszerzenia pliku spowoduje problem z wydajnością?

załadować obraz w mojej aplikacji z tej rozmowy:

[UIImage imageNamed:@"image"]; 

Podczas korzystania I/O aktywności przyrząd analizujący działania I/O, znalazłem, że istnieje kilka działań odnoszących się do tego pliku, w wyniku których "Brak takiego pliku lub katalogu", a te czynności zajmują trochę czasu.

te działania są jak czytać te pliki:

[email protected]~iphone.png 
[email protected]~iphone.png 
[email protected] (this one doesn't fail) 

I ku mojemu zaskoczeniu, każdej nieudanej operacji zajmuje więcej czasu niż jeden sukces.

Jak można uniknąć tego rodzaju problemu z wydajnością?

+0

coś podobnego - http://stackoverflow.com/questions/7599030/uiimage-imagenamed-extension – Krishnabhadra

+0

@CarmeloS. dostałem odpowiedź na pytanie "bez przyczyny problemu z rozszerzeniem pliku?" ? –

+0

@Rajapandian zobacz wybraną odpowiedź:) – CarmeloS

Odpowiedz

5

Jeśli chcesz zapobiec dostępowi do dużego systemu plików, nie używaj [UIImage imageNamed:], ale [UIImage imageWithContentsOfFile:].

Ten ostatni nie dokona żadnego zautomatyzowanego wyboru obrazu (zgadywanie rozszerzeń, zgadywanie siatkówki, ...) i nie będzie używać buforowania pamięci.

Upewnij się, że pamiętasz, że każdy powielony dostęp do obrazu w systemie plików, podczas korzystania z mojej sugestii, będzie bardzo surowo karany.

Nie polecam używania wersji imageNamed: w celu poprawy wydajności aplikacji. Zwykle jest odwrotnie i ładowanie obrazu będzie bardziej zoptymalizowane (buforowanie) podczas korzystania z tej metody. Jednakże, gdy masz pewność, że określony obraz nie zostanie ponownie załadowany i aby zapobiec nadmiernym poszukiwaniom systemu plików, użyj imageWithContentsOfFile:. Dodatkowo, naprawdę zaleca się używanie imageWithContentsOfFile:, gdy użycie pamięci jest punktem - brak buforowania oznacza mniej uszkodzoną pamięć.

+0

jeśli ta ostatnia nie wykonuje buforowania ani żadnych optymalizacji, to czy Dwayne powinien używać "image image", tak jak on już robi? –

+0

Och, nie sądzę, że OP chce uniknąć zgadywania, ale chce uniknąć problemów z wydajnością z tego powodu. Również buforowanie obrazu jest bardzo ważną funkcją, która pozytywnie wpływa na wydajność. Nie sądzę, żeby to odpowiadało na pytanie. – Krishnabhadra

+0

Buforowanie poprawia tylko wydajność w przypadku trafień w pamięci podręcznej. Tak więc założyłem, że PO będzie w stanie zapobiec pomyłkom. – Till

Powiązane problemy