Yanıtlar:
Modüllerden şüpheleniyorum ki bu da ihtiyacı ortadan kaldırıyor #import <Cocoa/Cocoa.h>
.
Bir önek başlığına koyacağınız kodu nereye koyacağınıza ilişkin olarak, bir önek başlığına koymanız gereken kod yoktur. İçe aktarmalarınızı ihtiyaç duyulan dosyalara yerleştirin. Tanımlarınızı kendi dosyalarına koyun. Makrolarınızı koyun ... hiçbir yere. Başka bir yol yoksa (gerektiğinde olduğu gibi) makro yazmayı bırakın __FILE__
. Makrolara ihtiyacınız varsa, bunları bir başlığa koyun ve ekleyin.
Önek başlığı, büyük ve tüm sistemdeki neredeyse her şey tarafından kullanılan şeyler için gerekliydi (gibi Foundation.h
). Bu kadar büyük ve her yerde bulunan bir şeyiniz varsa, mimarinizi yeniden düşünmelisiniz. Önek başlıkları kodun yeniden kullanılmasını zorlaştırır ve listelenen dosyalardan herhangi biri değişebilirse küçük derleme sorunları getirir. Bir önek üstbilgisi ile önemli ölçüde geliştirildiğini gösterebileceğiniz ciddi bir oluşturma süresi sorunu olana kadar bunlardan kaçının.
Bu durumda bir tane oluşturabilir ve clang'a aktarabilirsiniz, ancak iyi bir fikir olması inanılmaz derecede nadirdir.
EDIT: Tüm görünüm denetleyicilerinde kullandığınız bir HUD ile ilgili sorunuza, evet, onu gerçekten kullanan her görünüm denetleyicisine kesinlikle almanız gerekir. Bu bağımlılıkları netleştirir. Görünüm denetleyicinizi yeni bir projede yeniden kullandığınızda (denetleyicilerinizi iyi oluşturursanız yaygındır), ne gerektirdiğini hemen anlayacaksınız. Bu, özellikle örtük olmaları durumunda kodun yeniden kullanılmasını zorlaştırabilen kategoriler için önemlidir.
PCH dosyası, listeleme bağımlılıklarından kurtulmak için orada değildir. Xcode şablonlarının yaptığı gibi yine de UIKit.h
veya Foundation.h
gerektiği gibi içe aktarmanız gerekir . PCH'nin nedeni, gerçekten büyük başlıklarla (UIKit'te olduğu gibi) çalışırken derleme sürelerini iyileştirmektir.
TWAPIManager.m
Örneğin başka bir projeye kopyalamaya çalıştığınızda , TWALog()
nerede bulacağınıza dair bir ipucu olmadan tanımlanmayan hatalar alırsınız . Kod paylaşmaya çalışan birkaç büyük projede tam olarak bu sorunla karşılaştım. Yaratmak TWAPILog.h
ve ithal etmek, bunu önemsiz dev maliyetiyle çözüyor.
Doğru olup olmadığı sorusu olmadan, PCH dosyasını manuel olarak ekleyebilirsiniz:
Projeye yeni PCH dosyası ekleyin: Yeni dosya> Diğer> PCH dosyası .
Hedefin Oluşturma Ayarları seçeneğinde, Önek Başlığı değerini proje adı önek olarak PCH dosya adınıza ayarlayın (yani adlandırılmış proje TestProject
ve PCH dosyası adlandırılmışsa MyPrefixHeaderFile
, değeri TestProject/MyPrefixHeaderFile.pch
pliste ekleyin ).
İPUCU: Projeye koyduğunuz yerin yoluna gitmek için $(SRCROOT)
veya gibi şeyleri kullanabilirsiniz .$(PROJECT_DIR)
.pch
Hedefin At Yapı ayarlar seçeneği değerini ayarlamak precompile önek Başlık için YES
.
Kendi PCH dosyasını oluşturmanız gerekir
EkleNew file -> Other-> PCH file
Ardından bu PCH dosyasının yolunu derlemenize ekleyin setting->prefix header->path
($ (SRCROOT) /filename.pch)
$(PRODUCT_DIR)/$(PRODUCT_NAME)/PrefixHeader.pch
.Pch dosyası eklemek için
1) Projenize yeni .pch dosyası ekleyin-> Yeni dosya-> diğer-> PCH dosyasına
2) Projenizin yapım ayarlarına gidin.
3) "önek başlığı" nı arayın. Bunu Apple LLVM altında bulabilirsiniz.
4) Bunu alana yapıştırın $(SRCROOT)/yourPrefixHeaderFileName.pch
5) Projeyi temizleyin ve inşa edin. Bu kadar!!!
Manuel olarak bir .pch dosyası eklemeye karar verirseniz ve Objective-C'yi xCode 6'dan önceki gibi kullanmak istiyorsanız, .pch dosyasına UIKit ve Foundation çerçevelerini de aktarmanız gerekir. Aksi takdirde, bu çerçeveleri her başlık dosyasına manuel olarak içe aktarmanız gerekir. Aşağıdaki kodu, kullanılan dili test ettiği için yine de ekleyebilirsiniz:
#ifdef __OBJC__
#import <UIKit/UIKit.h>
#import <Foundation/Foundation.h>
#endif
Kullanım:
$ (PROJECT_DIR) / Proje adı / PrefixHeader.pch
Yeni PCH dosyası eklemek için aşağıdaki adımları izleyin:
(1) Yeni görüntü ekle - Seç iOS - Diğer ve PCH Dosyası
(2) bu PCH dosyasının yolunu Projenize ekleyin - BuildSetting - Apple LLVM 6.0 Dil
Set Önek Başlığı Yolu EkleUygulamaAdınız (kök yolu) / dosyaadı.pch