2012-05-08 20 views
7

Memory Management hakkında biraz okuma yapıyorum ve başlatıcı yönteminde erişimci yöntemlerini kullanmanızı önermiyorlar.Başlatma Yöntemlerinde ve Erişim Noktasındaki Erişim Yöntemlerini Kullanmayın

Soru: biz de stackoverflow ve diğer sitelerde bu konuda referansların coupe arıyordu

initilizer yönteminde erişimci yöntemleri kullanmak gerekir neden. Ancak, hala bunun hakkında kafa karıştırmıyorum.

Bu konuda bana tavsiyede bulunabilir veya bana bir örnek veya iyi bir atıfta bulunursanız, bunu kendim halledebilirim. Teşekkürler

+0

Konu hakkında hangi materyalleri okudunuz? Hangi bitler karıştı? – Jim

+0

Gömülü bağlantıya bir göz attınız mı? Aslında benim sorum da bir iş parçacığı konusu. Bir düzenleme yaptım, şimdi görevimi görebiliyorsun. – tranvutuan

cevap

2

İşte yazdığım bir örnek iki şey ortaya koyduğunu var:

  • başlatma yeniden sıralanmış nasıl
  • örnek başlatma üzerinde dursa da sızıntı

Initializing a property, dot notation

sokulabilir nasıl dealloc, benzer sorun kategorilerine yatkındır. Özel bir örnek olarak: Bir nesne, kendisini dealloc'da kısmen diriltebilir ve referans sayısı dengesizlikleri potansiyel bir tehlike haline gelir. Kısaca, herhangi bir alt sınıftan nesnelerinizin davranışsal endişeleri/etkilerinden ziyade, nesnelerinizin ihtiyaç duyduğu verilerin doğru şekilde başlatılmasına ve temizlenmesine odaklanmak istersiniz.


Daha okuma:

Why myInstance = nil instead of self.myInstance = nil?

Should I refer to self.property in the init method with ARC?

Best way to set a retained property to a newly created object

1

Bu, her iki tarafta geliştiriciler ile dini bir meseledir ve ARC'nin gelişi sorunu daha da bulanıklaştırmıştır.

nedenlerden bir çift:

  1. amacı tam olarak başlatılmış değildir ve erişimci tam nesnesinden bağlı olabilir.

  2. Erişimci yan etkilere sahip olabilir ve yine nesne tam olarak başlatılamamış olabilir. Yaygın bir yan etki ilk kullanımda bir iVar'ı başlatıyor.

Bu argümanlar da (non-ARC kodu için) dealloc kullanarak erişimcilerine başvurabilirler.

1

KVC gözlemciler alıcı ve ayarlayıcı yöntemleri izlerler. Kimsenin mülkünüzü hiç gözlemlemeyeceğinden kesinlikle emin değilseniz, o zaman sorun istiyorsunuz. Bir gözlemcinin kısmen açık bir nesne ile etrafta dolaştığı bir kusurun olması, çoğaltılması ve test edilmesi neredeyse imkansızdır.

0

Intiiliser yöntemleri ve dealloc erişimci yöntemlerini kullanmamanın arkasındaki temel neden, muhtemelen Mac OS X geliştirmesinden kaynaklanmaktadır ve büyük olasılıkla iOS'taki bir sorun değildir. Mac OS X GUI geliştirme, bir denetimin özelliğini bir nesnenin bir özelliğine bağlamanıza izin veren "bağlamalar" adı verilen kullanışlı bir şey içerir. Böylece, kullanıcı denetimi güncelleştirdiğinde, "bağlayıcı" özelliği otomatik olarak özelliği günceller. Program özelliği günceller (erişim yöntemleri aracılığıyla), "bağlayıcı" otomatik olarak kontrolü güncelleyecektir.

Anahtar Değer Gözlemleme (I think) ile çok fazla bağlayıcı şey yapılır. Anahtar Değer Gözlemleme, bir nesnenin diğer nesnelerdeki özelliklerde değişiklik gözlemlemesidir. Bir özelliği değiştirmek için bir erişimci yöntemi kullandığınızda, nesnenin yeni nesnesinde harekete geçebilmesi için nesneyi gözlemleyen herhangi bir nesne bildirilir. Accessor yöntemlerini kullanmak, başlatma ve ayrılma işlemi gibi, bunların gerçekleşmesini istemediğinizde, herhangi bir Anahtar-Değer Gözlemleme bildirimini tetikleyebilir, çünkü nesnenizin herhangi bir gözlemcisi, tam olarak değil, yalnızca kısmen başlatılmış veya kısmen ayrılmış bir örnekle ilgilenecektir. başlatılmış örnek.

Ayrıca, başka bir ana ilgi alanı da vardır; bu, nesnenizin alt sınıflandırıldığı zamandır. Nesnenizin özelliklerini ayarlamak için erişimci yöntemlerini kullandığınızda, aslında alt sınıfınızın erişim yöntemlerini çağırırsınız (eğer farklı erişim yöntemleri uygularsa). Bu, Objective-C gelişimindeki mirasın .NET ile kıyaslandığında nadir olması nedeniyle bir sorun olmasının daha az olasıdır.

+0

* Intiiliser yöntemlerinde ve dealloc'ta erişim yöntemlerini kullanmamanın temel nedeni büyük olasılıkla Mac OS X geliştirmesinden kaynaklanıyor ve muhtemelen iOS'taki bir sorun değil… * no. Bağlantılar potansiyel yan etkilerin listesine eklenir. yan etkiler (okuma: hatalar) bağlama, gözlemci, kullanıcı arabirimi vb. kullanmadan var olabilir. İşte temel yazım türlerini kullanan yazdım: http://stackoverflow.com/questions/5932677/initializing-a-property-dot-notation/5932733#5932733 – justin

+0

@Justin: Cevabımın sonunda alt sınıftan bahsetmiştim. – dreamlax

+0

evet. Bunu yorumlamadan önce gördüm. – justin