@Krizz'in önerisinde küçük bir değişiklik yapıldığı için, sabitler başlık dosyası PCH'ye dahil edilecekse düzgün çalışır, ki bu oldukça normaldir. Orijinal PCH'ye içe aktarıldığından, .m
dosyayı yeniden yüklemez ve böylece hiçbir sembol almazsınız ve bağlayıcı mutsuzdur.
Ancak, aşağıdaki değişiklik çalışmasına izin verir. Biraz kıvrık, ama işe yarıyor.
Şunlar gerekir 3 , dosyaları .h
sabit tanıma sahip dosyayı .h
dosyası ve .m
dosyayı, ben kullanacağım ConstantList.h
, Constants.h
ve Constants.m
sırasıyla. içeriği Constants.h
basitçe:
// Constants.h
#define STR_CONST(name, value) extern NSString* const name
#include "ConstantList.h"
ve Constants.m
dosya şöyle görünür:
// Constants.m
#ifdef STR_CONST
#undef STR_CONST
#endif
#define STR_CONST(name, value) NSString* const name = @ value
#include "ConstantList.h"
Son olarak, ConstantList.h
dosyada gerçek bildirimler var ve hepsi bu:
// ConstantList.h
STR_CONST(kMyConstant, "Value");
…
Unutulmaması gereken birkaç nokta:
Kullanılacak makro için ing sonra.m
dosyayı makro yeniden tanımlamak zorunda kaldı . #undef
Bunun #include
yerine #import
düzgün çalışması ve önceden derlenmiş değerleri görmek derleyici önlemek için de kullanmak zorunda kaldı .
Bu, herhangi bir değer değiştirildiğinde PCH'nizin (ve muhtemelen tüm projenin) yeniden derlenmesini gerektirir; bu, normal olarak ayrıldıklarında (ve çoğaltıldıklarında) durum böyle değildir.
Umarım bu birisi için faydalıdır.