2012-02-10 17 views
8

Yazım hatalarını önlemek için bir NSDictionary içindeki adlarınız için sabitleri kullanmayı anlıyorum (myName otomatik olarak @ "BenimAdı" tamamlanmayacaktır).NSDictionary ile çalışırken sabitler kullanıyor musunuz?

Şu anda ve birkaç kez orta boy sözlükleri ile çalışıyorum, anahtar adları yanlış yazdım ve bir kelimeyi hecelediğim yere biraz zaman harcamak zorunda kaldım.

Merak ediyorum, bir sabit isimlendirme şeması oluştururken buna değer olduğunu düşünüyor musunuz?

+2

Evet, onları çok kullanırsanız. Ayrıca refactoring (anahtarları yeniden adlandırma) kolaylaştırır. – Costique

cevap

21

Evet sever değerlere erişebilir, ama #DEFINEs yerine uygun dize sabitleri tanımlayan öneriyorum dizeleriniz için, dize sabitleri tür güvenlidir ve her başvuru, aynı gerçek dize nesnesini kullanır, bu da bunları karşılaştırmak için isEqualToString:'u kullanma performansını artırır.

static NSString *const MyConstant = @"MyConstant"; 

bunun yerine .h dosyasında bu koyabilirsiniz veya takvimi tanımını ayırabilirsiniz, açık hale getirmek için:

Eğer .m dosyasında bu koyabilirsiniz sabiti özel dize tanımlamak için

extern NSString *const MyConstant; 

Ve bu senin .m dosyasında: senin .h bu koyarak

NSString *const MyConstant = @"MyConstant"; 
+3

+1 çok iyi bir yanıt ve tamamen gidilecek yol - umarım bu, bu şeyler için sürekli olarak tanımlayan bazı iş arkadaşlarım tarafından okunacaktır; gök gürültüsü ve şimşek onları tuvalete çarpacak! – Till

3

Evet, buna değer. Böyle bir şeyde tutarlılık, söylediklerinizi yapar: hataları azaltır ve size zaman kazandırır.

4

Genelde bir GlobalDefinitions.h dosyası oluşturur ve sihirbazlar yerine kodda kullanabileceğim makroları yerleştiririm.

.h dosyası ekleyerek .h dosyası

#define PERSON_NAME @"Person_name" 
#define PERSON_BDAY @"Person_bday" 

bunu şimdi

[dictionary objectForKey:PERSON_NAME]; 
+1

Sabit dizenin # def'd dizgiden daha iyi olduğunu unutmayın. Bkz. Http://stackoverflow.com/questions/538996/constants-in-objective-c –

+0

Anlaşmalı - dize sabitlerinin nasıl tanımlanacağına ilişkin cevabımı aşağıya bakın. –

+0

Nick'in cevabına katılıyorum. –

İlgili konular