2011-06-29 19 views
6

Okuduklarımdan, bir nesneyi sınıf adından almanın iki yolu var gibi görünüyor. NSClassFromString() ve NSBundle'un classNamed:(NSString *) arasındaki farklar nelerdir? Belirtilen adın çalışma zamanı ile kaydedilmiş bir sınıfı döndürür.NSClassFromString() vs classNamed: (NSString *)

cevap

5

. NSBundle'ın classNamed: sınıfı, paketin içinde, henüz yüklenmemiş olabilen (yani, gerekirse paketi yükleyeceği anlamına gelir) sınıfı döndürür.

Farklı bir yol: Bir NSBundle muhtemelen uygulama çalışma zamanınızda yüklü olan tüm sınıfları bilmez (ancak ana paketiniz olsa, muhtemelen sınıflarınızın çoğunu bilir). Tersine, uygulamanızın çalışma zamanı, yüklenmeden önce bir paket içindeki tüm sınıfları bilmeyecektir.

+2

'+ classNamed:' dosyasının kayıtlı ve yüklenmesine neden olacağından şüpheleniyorum. – bbum

+0

@bbum: Evet, olacak. Aydınlatılmış. – Chuck

+2

@bbum: 'classNamed:' bir sınıf yöntemi değil, bir örnek yöntemidir ('-classNamed:'). Bu da beni başka bir fark yaratıyor: classNamed: 'bir paketin gönderilmesi soruyor * sınıf için bu özel paket *. Eğer sınıf bu pakette değilse (başka bir grupta olduğu için ya da olmadığı için), “Nil” yi alırsınız. “NSClassFromString” hangi paketi sağladığından bağımsız olarak sınıfı döndürür. –