tworzy rozszerzenie klasy (I stand corrected, props to bbum) na interfejsie Foo, który jest jak dodatkowe metody dodane do interfejsu. Niektórzy używają także @interafce Foo(Private)
(kategoria) zamiast rozszerzenia klasy z ()
. To bardziej przypomina "wstrzykiwanie" nowych metod do klasy spoza klasy.
Umieszczenie tego w pliku .m powoduje, że inne rzeczy nie "widzą" w pliku .h, ale to wszystko. Zasadniczo ludzie zwykle używają rozszerzeń kategorii lub klasy w plikach .m, aby określić prywatne interfejsy, ale są również używane do takich rzeczy, jak UIKit używa kategorii, aby dodać publiczne metody do NSIndexPath. (Może to być mylące.)
Tak naprawdę nie musisz definiować prywatnych metod w ten sposób, ale jeśli masz metodę o nazwie bar, która wywołuje metodę foo, zanim foo zostanie zdefiniowane w pliku źródłowym, otrzymasz kompilator ostrzeżenie typu "obiekt własny może nie odpowiadać na foo". Możesz się tego pozbyć, definiując foo przed zdefiniowaniem paska lub innego kodu wywołującego foo. To samo dotyczy zwykłego C i funkcji.
Tak jak Ole mówi, to nie powstrzymuje nikogo przed wywołaniem prywatnych metod, po prostu deklaruje intencję, że są prywatne i powoduje, że kompilator generuje ostrzeżenia "nie odpowiadaj", nawet jeśli importują plik .h .
EDIT
zobaczyć również http://www.friday.com/bbum/2009/09/11/class-extensions-explained/ jakiegoś wyjaśnienia kategoriach vs. rozszerzeń klasowych. Wygląda na to, że rozszerzenia klas powinny być bardziej poprawne do definiowania prywatnych metod, z perspektywy ostrzeżenia kompilatora, ponieważ metody kategorii są opcjonalne. Chciałbym, żeby moja książka to wytłumaczyła!
Istnieje ogromna różnica między nazwanymi kategoriami '(foo)' i rozszerzeniem klasy '()'. – bbum
Czy masz odniesienie do tego? Nie widzę niczego w książce "Programowanie w Objective-C 2.0" na ten temat. Wygląda na to, że nazwa kategorii jest opcjonalna ze wszystkiego, co mogę powiedzieć. Nie, że jestem głównym ekspertem lub kimkolwiek innym, ale byłoby pomocne, gdybyś mógł podać link wyjaśniający różnicę między (Prywatne) i(). – Nimrod
nevermind, wydaje mi się, że znalazłem Twojego bloga http://www.friday.com/bbum/2009/09/11/class-extensions-explained/ Zastanawiam się, dlaczego moja książka o tym nie mówi? – Nimrod