2011-11-21 25 views
17

soru oldukça basittir: Yeni bir API veya Servis Class oluşturduğunuzda etrafında geçirilen veya sadece basitçe verileri tutan bir NSDictionary tutması gerektiğini nesneler için özel bir sınıf oluşturmak gerekir anahtar/değer stili biçiminde.NSDictionary özel nesne vs

Açıkçası artıları ve eksileri vardır ama nereye siz diğeri üzerinde birini kullanarak eşiği olduğunu düşünüyorsunuz?

NSDictionary:

+ yok bağımlılıkları Yaygın
+ Yap-NSCoding
- Yapısı desteği tanımlanmamış kullanılan
+ Çok Esnek
+ -> Runtime hataları

Özel bir nesne:

+ Yapısı tanımlanan
+ Mülkiyet tarzı erişim araçları: myObject.someProperty - Bir rel neden olabilir. İç içe nesnelerin

Güncelleme için sınıfların büyük sayı: jbat100

+1

Bu sizin tercihlerine bağlıdır. Örneğin, ben her zaman bir iş katmanı mantığı (BLL) ve genellikle özel nesneleri olun. – beryllium

cevap

9

Gerçekten size veri modeli değiştirmesini bekliyoruz ne kadar bağlıdır. Özel sınıf tabanlı bir veri modeline sahip olduğunuzda değişiklik yapmak, özellikle modelinizin farklı sürümleriyle (uygulamanızın zaten gönderilmiş sürümlerinde) arşivler (NSCoding şeyler) olduğunda zor olabilir, geriye dönük uyumluluk sağlamak için çok dikkatli olmalısınız. kötü çalışma süresi sürprizlerinden kaçının. Bu açıdan NSDictionary tabanlı modeller, daha esnek dediğiniz gibi. Ancak, özel sınıfların yaptığı tüm özel denetimlere ve davranışlara izin vermezler. Ayrıca özel sınıflar, kodları bilmeyen kodlayıcılar için veri modelini daha açık bir hale getiriyor, deneyimlerimden, geliştiriciler çoğu zaman anlaşılmaz bir karmaşayla sonuçlanabilen NSDictionary tabanlı modellerle uğraşırken genellikle özensiz (özellikle deneyimsiz olduğunda) oluyorlar. rota, iyi belgeleyin ve disiplinli olun!

@interface NSDictionary (MyClassCategory) 
-(NSString*) someField; 
@end 

@implementation NSDictionary (MyClassCategory) 
-(NSString*) someField { 
    return [self objectForKey:@"someField"]; 
} 
@end 

typedef NSDictionary MyClass; 

Ve kullanmak: Eğer salt okunur erişim ihtiyacı ve yöntemleri gerekmiyorsa

+0

NSCoding ile ilgili konudan bahsettiğiniz için bu durumun farkında değildim. Bunu pro's ve con'un – Besi

11

den Dahil açıklamalar Genellikle iPhone gelişme MVC yaklaşımıyla daha uygun etki alanı modelleri, bir dizi var. Belirli nesneler sahip olmak, tip-güvenliğini çok daha kolay uygulanmasını sağlar ve aynı zamanda uzun vadede karmaşıklığını azaltır. Eğer NSArrays ve daha NSDictionaries vb içeren NSDictionaries varsa vb nesne grafiğini temsil etmek, çok hızlı bir şekilde yönetilemez hale gelebilir.

4

, aşağıdakileri yapabilirsiniz

MyClass* myClass = ...; 
    NSString* value = [myClass someField]; 
+4

listesine ekledim. Özel sınıf oluşturma konusunda bir kategori yaratmanın amacı nedir? – Godfather