2010-03-28 14 views
6

jestem rozważa wprowadzenie:Jaka jest kara za wydajność korzystania z programu KindOfClass w Objective C?

if ([myInstance isKindOfClass:[SomeClass class]]) { do something...} 

do kawałka kodu, który zostanie wywołany dość często. Czy wprowadzę znaczącą karę za wyniki? W Objective C istnieje szybszy sposób oceny, czy dana instancja obiektu ma określony typ klasy? Na przykład, czy poniższe jest szybsze? (Zdaję sobie sprawę, test jest nieco inna)

if (myInstance.class == [SomeClass class]) { do something else...} 
+6

Co wyniki swojej profilowania powiedzieć? –

+0

Nie zrobiłem jeszcze żadnego profilowania; to mój kolejny krok. Miałem nadzieję, że uda mi się znaleźć jakąś dokumentację wyjaśniającą ukrytą magię na zajęciach w Celu C, zanim przejdę do testowania ślepych perfów. Jednak nie znalazłem nic, więc zamierzam po prostu wypróbować różne permutacje. Wszelkie sugestie dotyczące tego, jak inaczej mogę zidentyfikować typ klasy danej instancji? – durcicko

+0

Nie ma czegoś takiego jak ślepe testowanie wydajności ... tylko ślepa optymalizacja! Ponadto, środowisko wykonawcze Obj-C decyduje, która metoda wywoływać w oparciu o klasę obiektu za każdym razem, gdy wywoływana jest metoda, więc skorzystaj z tego, umieszczając metodę {do something ...} w metodzie klasy, która Cię interesuje. – codewarrior

Odpowiedz

4

Najszybszym sposobem, aby sprawdzić, czy dwa obiekty są tej samej klasy jest porównanie ich isa wskazówek. Oznacza to jednak, że pominiesz, gdy klasa jednego obiektu jest podklasą klasy innego obiektu, do czego dokładnie służy isKindOfClass:.

Niezależnie od tego, optymalizacja mówisz już zostało zrobione tutaj:

http://www.mulle-kybernetik.com/artikel/Optimization/opti-3-imp-deluxe.html

+0

To dokładnie rodzaj informacji, których szukałem. Dziękuję za wskazanie mnie w tym kierunku. – durcicko

+0

Ktoś powiedział mi, że Apple nie chce już więcej używać wskaźników "isa". – funroll

Powiązane problemy