2013-07-09 8 views
6

Mam dziś poszukiwanie wiedzy.. Pliki .h i .m w Objective-c

pracuję nad pewnym kodem do pracy, a po przeglądzie miałem kompletną mózgu Fart i nie pamiętam dlaczego robimy coś z .h i pliki .m w Objective-C

  1. Zastanawiam się, dlaczego importujemy pliki i deklarujemy nazwy metod w plikach .h? (Wiem, że ma to związek z przetwarzaniem, ale nie pamiętam szczegółów).
  2. Dlaczego czasami importujemy pliki bezpośrednio do pliku .m, a nie w plikach .h w niektórych przypadkach.
  3. Po zadeklarowaniu metody w pliku .h robisz to, ponieważ klasa i/lub biblioteki, których używasz, nie wykonują funkcji, której potrzebujesz?
  4. Czy kiedykolwiek zdarzyło się, że zadeklarowałeś metodę, która nie istnieje w żadnej z twoich bibliotek lub pliku .h w twoim pliku .m?

Dziękuję wszystkim mam nadzieję, że wszystko ma sens.

+0

Obawiam się, że nic z tego nie miało sensu. :( –

+4

Erm ... to ma sens, wystarczy odpowiedzieć teraz – Fogmeister

Odpowiedz

15
  1. Służy do oddzielania publicznych i prywatnych części zajęć. Plik .m to implementation. Jest tam, gdzie przebiega cała logika, wszystkie dane są przetwarzane i przechowywane, itp. Plik .h to interface tej klasy. To dosłownie jak API dla twojej klasy. Mówi innym klasom, jak z niego korzystać i jak z nim łączyć.

  2. Importujesz klasę, gdy odwołujesz się do niej w pliku. Jeśli odwołujesz się do czegoś (tzn. Właściwości) w interfejsie, to importujesz go do pliku .h. Jeśli odwołujesz się tylko do niego w implementacji, to importujesz go do pliku .m.

  3. Wszystkie metody zadeklarowane w .h istnieją po to, aby inne klasy wiedziały, że mogą je uruchomić. tj. są to metody publiczne. Spróbuj i usuń deklarację, a następnie wywołaj tę metodę. Otrzymasz ostrzeżenie.

  4. Nie, to nie ma sensu. Chyba że byłeś w trakcie pisania programu i zadeklarowałeś go do celów testowych.

+0

za odpowiedź na pytanie 2. Myślę, że rozumiem pierwszą część. Czy możesz wyjaśnić, może używając przykładu druga część o referencji do implementacji. – Jadex1

+0

KIEDY powiedziałem "odwołaj go w implementacji", po prostu chciałem go użyć w klasie .m. na przykład jeśli utworzysz niestandardową klasę o nazwie 'MyCustomClass', a następnie w kontrolce widoku, zdecydujesz się z niej skorzystać. Następnie musisz zaimportować go do pliku .m. – Fogmeister

3
  1. Ponieważ plik .h jest klasa jest public interface
  2. Ponieważ oddanie importu do pliku .m czyni je prywatne i utrzymuje zależności z pliku .h (zapobiega nadmiernemu importowanie zależnościach i potencjalnych circularities)
  3. robisz to publicznie stwierdzić, że świadczenia tej usługi
  4. nie należy, jeśli nie istnieje nie można z niego korzystać (choć może zadeklarować rzeczy, które istnieją i nadzieję sprawdzić przed faktycznie próbujesz ich użyć)

Dodatkowa premia za 2. W pliku .h należy starać się, aby minimalna liczba importów była możliwa (wystarczy nadklasa i dowolne protokoły, które publicznie zaimplementowano) i dla wszystkich pozostałych użyć @class. Minimalizuje to zależność zależności.

+0

Dziękuję za wyjaśnienie, które mi pomogło, więc trzymanie metod w pliku .h pomaga zachować ich prywatność – Jadex1

+0

@ Jadex1 Jeśli mam rację, to jest to .Plik m jest prywatny, jak mówi Fogmeister: "Plik .m jest implementacją, to tam jest cała logika, wszystkie dane są przetwarzane i przechowywane itd.". – 0x1ad2

Powiązane problemy