SORU
21 HAZİRAN 2013, Cuma


Objective-C sabitler oluşturmak için en iyi yolu nedir

Öğrenme amaçlı Reddit istemcisi yaratıyorum. İçinde sabit bir dosya olması lazım. Reddit-Prefix.pch dosyası dosya sabitler tüm dosyaları kullanılabilir hale getirmek için alma hakkında düşünüyordum.Şeyler yapmanın iyi bir yolu?Ayrıca, benim araştırma yaptım ve birkaç yöntem sabitler oluşturmak için buldum ama kullanmayı bilmiyorum:

  • #define makro
  • const
  • static const
  • extern const
  • enum

Hangi yolu tercih edilen yoldur? Sözleşme nedir?"" Ama benim sorum özellikle de . duruma göre değişir biliyorum ^strong>Bu çözümlerin her biri için durumlarda kullanmak nedir?

extern const kullanarak dosya almak gerekir mi, ya da sabitler dünya çapında satışa dosyasını almadan olacaktır.

Mantıksal sonucuna bir şey enum özel hata etki (aslında haklı mıyım?) gibi bir şey tanımlarken en iyi seçimdir. Peki Diğerleri ne olacak?

CEVAP
21 HAZİRAN 2013, Cuma


İlk soru sabitler gerçekten iki soru olan var, ne isterseniz

  • Bu sabitler tek bir sınıfa özgü, ya da duyu uygulaması her yerinde var mı?
  • Eğer sınıf özgü olmadıklarını, sadece sınıf içinde sınıf, istemciler tarafından kullanılacak, yoksa değil mi?

Eğer tek bir sınıf için özel iç iseler, üstünde static const olarak ilan ediyorum .m dosya, şu şekilde:

static NSString *const MyThingNotificationKey = @"MyThingNotificationKey";

Tek bir sınıfa ait ama halka açık/diğer sınıflar tarafından kullanılmalıdır başlık extern olarak bildirmek ve onları tanımlamak .m:

//.h
extern NSString *const MyThingNotificationKey;

//.m
NSString *const MyThingNotificationKey = @"MyThingNotificationKey";

Eğer küresel olması gerektiği, bir başlıkta bunları bildirmek ve ilgili bir modül içinde onları tanımlamak, bu sabitleri için özellikle.

Sen karıştırmak ve bu maç için farklı sabitler ile farklı düzeylerde nasıl küresel gitmelerini ister ve farklı küresel sabitler sadece yok aitsiniz—sen-ebilmek koymak onları içinde ayrı bir modül, her birinin kendi Başlığı, Eğer isterseniz.

Neden #define değil mi?

Eski cevap “makrolar tipi bilgi yok”, ama Derleyiciler bugün bu tür denetleme rakamları genişletmek için ne gibi değişkenler için. tüm yapmak konusunda oldukça zekidir.

Modern cevap hata ayıklayıcı makrolar haberi yok çünkü. MyThingNotificationKey makro ise bir hata ayıklayıcı komutu [myThing addObserver:self forKey:MyThingNotificationKey] diyemezsin; hata ayıklayıcı yalnızca bir değişken ise öğrenemez.

Neden enum değil mi?

Peki, rmaddy yorum benden önce davranmış: enum sadece tamsayı sabitler tanımlayabilirsiniz. Seri tanımlayıcı numaraları gibi şeyler, bit maskeleri, dört-bayt kodları, vb.

Bu amaçlar, enum harika ve kesinlikle bunu kullanmalısınız. (Daha da iyisi, kullanmak the NS_ENUM and NS_OPTIONS macros.) Diğer şeyler içingerekirbaşka bir şey; enum kullanın ama tamsayılar hiçbir şey yapmaz.

Ve diğer sorular

Reddit-Önek dosya alma hakkında düşünüyordum.dosya sabitler tüm dosyaları kullanılabilir hale getirmek için pch. Şeyler yapmanın iyi bir yolu?

Muhtemelen zararsız, ama muhtemelen aşırı. Onları gereken yere başlık(lar) sabitler alma.

Bu çözümlerin her biri için durumlarda kullanmak nedir?

  • #define: Oldukça sınırlı. Açıkçası sabitleri için artık bunu kullanmak için iyi bir nedeni var emin değilim.
  • const: yerel sabitler için en İyi. Ayrıca, bir başlık olarak ilan ettin ve şimdi belirleyici olan biri için bunu kullanmak zorunda.
  • static const: dosya-özel (ya da sınıfa özgü) sabitleri için en İyi.
  • extern const: bir başlık. bir sabit verilirken bu kullanmanız gerekir

extern const kullanarak dosya almak gerekir mi, ya da sabitler dünya çapında satışa dosyasını almadan olacaktır.

Dosyayı almak için, ya da önek başlığında kullandığınız her dosya veya gerekir.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Microsoft Research

    Microsoft Re

    24 EKİM 2008
  • Sean Murphy

    Sean Murphy

    4 ŞUBAT 2009
  • TheDigiCraft

    TheDigiCraft

    25 NİSAN 2011