Odpowiedzi:
Podejrzewam, że z powodu modułów, które eliminują potrzebę #import <Cocoa/Cocoa.h>
.
Co do tego, gdzie umieścić kod, który należy umieścić w nagłówku prefiksu, nie ma kodu, który należy umieścić w nagłówku prefiksu. Umieść swoje importy w plikach, które ich potrzebują. Umieść swoje definicje we własnych plikach. Umieść swoje makra ... nigdzie. Przestań pisać makra, chyba że nie ma innej możliwości (na przykład kiedy potrzebujesz __FILE__
). Jeśli potrzebujesz makr, umieść je w nagłówku i dołącz.
Nagłówek prefiksu był niezbędny dla rzeczy, które są ogromne i używane przez prawie wszystko w całym systemie (jak Foundation.h
). Jeśli masz coś tak ogromnego i wszechobecnego, powinieneś przemyśleć swoją architekturę. Nagłówki prefiksów utrudniają ponowne użycie kodu i wprowadzają subtelne problemy z kompilacją, jeśli którykolwiek z wymienionych plików może ulec zmianie. Unikaj ich, dopóki nie pojawi się poważny problem z czasem kompilacji, który możesz wykazać, że został znacznie poprawiony dzięki nagłówkowi prefiksu.
W takim przypadku możesz go utworzyć i przekazać go do brzęku, ale jest to niezwykle rzadkie, że to dobry pomysł.
EDYCJA: Na twoje konkretne pytanie dotyczące interfejsu, którego używasz we wszystkich kontrolerach widoku, tak, powinieneś absolutnie zaimportować go do każdego kontrolera widoku, który faktycznie go używa. To wyjaśnia zależności. Kiedy ponownie użyjesz kontrolera widoku w nowym projekcie (co jest powszechne, jeśli dobrze zbudujesz kontrolery), natychmiast dowiesz się, czego wymaga. Jest to szczególnie ważne w przypadku kategorii, które mogą utrudnić ponowne użycie kodu, jeśli są niejawne.
Plik PCH nie pozwala pozbyć się zależności od list. Nadal powinieneś importować UIKit.h
lub Foundation.h
w razie potrzeby, podobnie jak szablony Xcode. Powodem PCH jest skrócenie czasu kompilacji w przypadku naprawdę dużych nagłówków (jak w UIKit).
TWAPIManager.m
, na przykład, do innego projektu, otrzymasz błędy, które TWALog()
nie są zdefiniowane, bez żadnej wskazówki, gdzie je znaleźć. Właśnie ten problem spotkałem w kilku dużych projektach próbujących współdzielić kod. Utworzenie TWAPILog.h
i zaimportowanie rozwiązuje to przy niewielkich kosztach tworzenia.
Bez pytania, czy jest to właściwe, czy nie, możesz ręcznie dodać plik PCH:
Dodaj nowy plik PCH do projektu: Nowy plik> Inne> Plik PCH .
W opcji Ustawienia kompilacji obiektu docelowego ustaw wartość Nagłówka prefiksu na nazwę pliku PCH, z nazwą projektu jako prefiksem (tzn. Dla nazwanego projektu TestProject
i pliku PCH MyPrefixHeaderFile
dodaj wartość TestProject/MyPrefixHeaderFile.pch
do listy).
WSKAZÓWKA: Możesz użyć rzeczy takich jak $(SRCROOT)
lub, $(PROJECT_DIR)
aby dostać się do ścieżki, w której umieścisz .pch
projekt.
W opcji Ustawienia kompilacji obiektu docelowego ustaw wartość Prekompilowanego nagłówka prefiksu na YES
.
Musisz utworzyć własny plik PCH
DodajNew file -> Other-> PCH file
Następnie dodaj ścieżkę tego pliku PCH do swojej kompilacji setting->prefix header->path
($ (SRCROOT) / nazwa_pliku.pch)
$(PRODUCT_DIR)/$(PRODUCT_NAME)/PrefixHeader.pch
Aby dodać plik .pch
1) Dodaj nowy plik .pch do swojego projektu-> Nowy plik-> inny-> plik PCH
2) Przejdź do ustawień kompilacji projektu.
3) Wyszukaj „nagłówek prefiksu”. Można to znaleźć pod Apple LLVM.
4) Wklej to w pole $(SRCROOT)/yourPrefixHeaderFileName.pch
5) Oczyść i zbuduj projekt. Otóż to!!!
Jeśli zdecydujesz się ręcznie dodać plik .pch i chcesz używać Objective-C tak jak przed xCode 6, będziesz musiał również zaimportować frameworki UIKit i Foundation do pliku .pch. W przeciwnym razie konieczne będzie ręczne zaimportowanie tych ram w każdym pliku nagłówka. Możesz dodać poniższy kod, który testuje używany język:
#ifdef __OBJC__
#import <UIKit/UIKit.h>
#import <Foundation/Foundation.h>
#endif
Posługiwać się :
$ (PROJECT_DIR) / Nazwa projektu / PrefixHeader.pch
Aby dodać nowy plik PCH, wykonaj następujące czynności:
(1) Dodaj nowy podgląd - wybierz iOS - inny i plik PCH
(2) dodaj ścieżkę tego pliku PCH do swojego projektu - BuildSetting - Apple LLVM 6.0 Language
Dodaj zestaw Prefiks Ścieżka nagłówka YourApplicationName (root-path) /filename.pch