2009-06-17 19 views
6

Süper sınıfın ilk yöntemini veya sonunu çağırsam sorun olur mu? O bekliyoruz rağmen ÖrneğinObjectiveC'de süper sınıf maddenin yöntemini çağırmanın zamanlaması mı?

-(void)didReceiveMemoryWarning { 
    /* do a bunch of stuff */ 

    [super didReceiveMemoryWarning]; 
} 

vb viewWillAppear, willRotateToInterfaceOrientation gibi diğer yöntemler için

-(void)didReceiveMemoryWarning { 
    [super didReceiveMemoryWarning]; 

    /* do a bunch of stuff */ 
} 

aynı soruya karşılık ben (sadece üslup veya felsefi değil anlamlı farklar için

arıyorum

çok).

cevap

6

Tipik Kakao kongre: Kurulumu yapıyorsanız

  1. , süper İLK
  2. Eğer çağrı Eğer, süper SON
çağrı söküm performans

Yani, ilklendirme, viewDidLoad, vb. Ilk durumda. Bellek uyarıları, viewDidUnload ve dealloc ikinci durumun altına düşer.

Ayrıca, sınıfınızı bu sözleşmeyi takip edecek şekilde de tasarlamalısınız. Herhangi bir sapma özellikle belirtilmelidir. İlgili

SO cevap:

`[super viewDidLoad]` convention


eklemek için: mantığı kurulumu sırasında süper ilk çağırmak için, size işlevselliğini genişletmek önce her şeyin yerinde olduğundan emin olmak için olmasıdır. Sonuç olarak, tahsis edildiğiniz zaman, alt sınıfınızın herhangi bir üst sınıf ivarını istemediğinizden, bunları işlemek için bir şansınız olmadan ayrılmanız gerekir. Aşağıdaki yorum belirtildiği gibi

Bu UI referans mantıklı yanı günceller.

+0

Bu değerlendirmede willRotateToInterfaceOrientation öğesini nasıl sınıflandırırsınız? – fnCzar

+2

Bence, kurulum olduğunu söyleyebilirim. Süper sınıfın, nesnenin (büyük olasılıkla kök görüntüleme nesnesini de içerir) rotasyonlarını gerçekleştirmesini istediğinizi düşünürdüm ve daha sonra, sizin gerçekleştikten sonra sizinkileri (büyük olasılıkla alt görünümler) ele almak isteyeceksiniz. –

6

Bu işlevsellik bağlıdır, ya süper sınıf sonra veya bir şey yaptıktan sonra bir şeyler yapmak istersiniz. Örneğin

üst sınıf bazı UI öğeleri dayanırsa ve bunu uzatmak ve sınıf biraz daha UI öğeleri düzenleyecek. Boyutu tüm nesnenize uyacak şekilde almak için, öğelerinin boyutunu hesaplamak için süper sınıfı arayabilir ve daha sonra eklediğiniz öğelerin boyutunu bu boyuta eklersiniz. Mantıklı olmaz

aksi - bu senin hesaplama yazılır diye süper sınıf sizin birimin varlığından haberdar değildir. Yine, bu uygulamaya bağlı.

son şey olarak süper yöntemini çağırmanız gerekir belirli bir durum var:

-(void)dealloc 
{ 
    ... 
    [super dealloc]; 
} 
İlgili konular