2011-08-12 18 views

cevap

15

Bildirimler ve KVO benzer işlevlere sahiptir, ancak farklı satış noktaları vardır.

  • Bildirimler kolayca anlaşılır. KVO ... anlamak için ... (en azından kuyuyu nasıl kullanacağını anlamak için).

  • Bildirimler, gözlenen kodun değiştirilmesi gerekmektedir. Gözlem, sunduğu her bildirimi açıkça oluşturmalıdır. KVO gözlenen kod KVC'ye uygun olduğu sürece gözlemlenen kod için saydamdır (yine de olması gerekir).

  • Bildirimleri kullanmıyor olsanız bile ek yükünüz var. Gözlemlenen kod bir bildirim gönderdiğinde, sistemdeki her gözleme karşı kontrol edilmeli, hiç kimse o nesneyi gözlemlemiyor olsa bile (hiç kimsenin bir şeyi gözlemlemiyor olsa bile). Sistemde birkaç yüzden fazla gözlem varsa, bu çok önemsiz olabilir. Birkaç bin varsa ciddi bir sorun olabilir. KVO, gerçekte gözlemlenmeyen herhangi bir nesne için sıfır yüke sahiptir.

Genel olarak, KVO'yu doğru kullanımı zor hale getirdiğine inanıyorum bazı özel uygulama sorunları nedeniyle cesaret kırıyorum. Üst sınıfınızın, süper sınıfınızın özel bilgisi olmadan da gözlemlediği bir nesneyi gözlemlemek zor. Dize değişmezlerinin ağır dayanağı, derleme zamanında yakalamak için küçük yazım hatalarını zorlaştırır. Genelde, ağır bir şekilde dayanan, karmaşık ve okunması zor olan bir kod buluyorum ve uzak mesafeli hatalara karşı ürkütücü eylemler almaya başlıyorum. NSNotification kodu daha açık olma eğilimindedir ve neler olduğunu görebilirsiniz. Rastgele kod, beklemediğinizde sadece çalışmaz.

Tüm bunlar, KVO'nun önemli bir özellik olduğunu ve geliştiricilerin bunu anlaması gerektiğini söyledi. Daha fazla ve daha düşük seviyeli nesneler, sıfırdan fazla avantajları nedeniyle ona güveniyor. Ancak yeni geliştiriciler için genellikle KVO'dan ziyade bildirime daha fazla güvenmelerini tavsiye ederim.

Üçüncü yol var. Bir delege listesi tutabilir ve bir şeyler değiştiğinde mesaj gönderebilirsiniz, tıpkı delege yöntemleri gibi. Bazı kişiler bu "çok noktaya yayın delegeleri" olarak adlandırılır, ancak "dinleyiciler" burada daha doğrudur çünkü nesnenin bir temsilci olarak davranışını değiştirmedikleri için. KVO'nun karmaşıklığını eklemeden, bir sistemde çok fazla gözlem yapmanız gerekiyorsa, bu şekilde yapmak 'dan çok daha hızlı olabilir.

+0

Teşekkürler, Rob! > Bildirimleri kullanmasanız bile ek yükünüz var. Gözlemlenen kod bir> bildirimi her yayınladığında, sistemdeki her gözleme karşı kontrol edilmeli, hiç kimse bu nesneyi gözlemlemiyor olsa bile (hiç kimse bir şey gözlemlemiyor olsa bile). Bu sorun, farklı NSNotificationCenter (ler) e gönderme sorunu çözülemedi mi? Bu, performansı geliştiremedi, emin değilim –

+2

Evet, ayrı NSNotificationCenters yönetme arama performansını artıracak. Anlattığım "dinleyici" kalıp, temel olarak her bir nesneyi kendi bildirim merkezine (başlangıçta çaldığım bir uygulama olan) veren temel bir evrimdir. Birden çok bildirim merkezi ile ilgili temel sorun, alışılmadık bir model olması ve diğer geliştiricileri karıştırmasıdır.Yanlış merkez kullandıklarında, sessizce hiçbir şey yapmazlar ve nedenini bilmezler. Ama prensipte yanlış bir şey yok. –

+0

Bu bağlantıyı daha iyi takip edin: http://nshipster.com/nsnotification-and-nsnotificationcenter/ –

İlgili konular