2009-03-16 36 views

cevap

215

Normalde Andrew'un "uygulamanızın kalbi" terimini kullanmasının ima ettiği tasarım yaklaşımından kaçınıyorum. Bununla demek istediğim, merkezi bir yerde çok fazla şey toplanmasını engellemeniz gerektiğini düşünüyorum - iyi program tasarımı normalde işlevsellikten "endişe alanı" ile ayrılmasını içerir.

Delege nesnesi, bağlı olduğu nesne belirli olaylara veya durumlara ulaştığında bildirilen bir nesnedir. Bu durumda Uygulama Temsilcisi, UIApplication nesnesi belirli durumlara ulaştığında bildirim alan bir nesnedir. Bir çok açıdan, özel bir bire bir Gözlemci kalıbıdır.

Bu, AppDelegate için "endişe alanının" özel UIApplication durumlarını ele aldığı anlamına gelir. Bunların en önemlileri şunlardır:

  • applicationDidFinishLaunching: - İyi
  • applicationWillTerminate on-başlatma yapılandırma ve inşaat işlemek için: - sonunda temizlik için iyi

diğer işlevsellik koyarak kaçınmalıdır AppDelegate'de gerçekten ait olmadıkları için. Söz konusu diğer işlevler içerir:

  • Belge veri gönderimi - (çoklu belge uygulamalar için) bir belge yöneticisi tek ya (tek belge uygulamalar için) bir belge singleton'ununu
  • Düğme/tablo/görünüm denetleyicileri olmalı, görünüm temsilci yöntemleri veya diğer görünüm işleme (applicationDidFinishLaunching :) uygulamasında en üst düzey görünümün oluşturulması dışında - bu çalışma ilgili denetleyici sınıflarında olmalıdır.

Birçok kişi bu şeyleri AppDelegate'ına götürür çünkü tembeldirler veya AppDelegate'in tüm programı denetlediğini düşünürler. AppDelegate'inizde merkezileşmekten kaçınmalısınız çünkü uygulamadaki endişe alanlarını bulanıklaştıracak ve ölçeklenmeyecektir. Bu biraz daha yardımcı olacaktır

+2

Matt, son cümle anlam ifade etmiyor. – Abizern

+3

Bunun için üzgünüm, Abizern. Şimdi cümleleri tamir ettim. –

+4

+1 Bu mükemmel bir cevaptır. Alt görünümlerin, bir görünüm denetleyicisine farklı bir alt görünüme geçmesi talimatını vermek için appDelegate komutunu çağıran ve kod kokusu gibi görünen bazı örnek kodlara bakıyordum. Burnumun iyi olduğunu bilmek hala işe yarıyor. – Alan

21

Uygulamanızın temsilcisi, uygulamanızın kalbidir. Bu etkili "Program Kontrolcünüz".

Uygulama Temsilcisi, diğer görünümlerin oluşturulmasını başlatmak için en yaygın olarak kullanılan applicationDidFinishLaunching iletisi de dahil olmak üzere uygulama düzeyinde iletiler alan sınıftır.

Tam olarak benzer olmasa da, bunu Kakao programınızın "ana()" rutinini olarak düşünebilirsiniz.

+0

10 Size +1 veriyorum çünkü tüm UI denetleyicilerinizin AppDelegate'de olması, tüm bu özel sınıfları oluşturmaktan daha zahmetsiz. – rwols

+2

@rwols, endişelerinizi ayırarak daha temiz kodlar için yardımcı olur ve hata ayıklama konusunda daha az güçlük çeker, bu özel sınıfı oluşturmak için zaman ayırmanız gerekir ve tüm gözlemcilerinizi tek bir dosyaya koymazsınız. – wheeliez

1

Umut ... Bu dilin hep aynı soruyu sahip yeni

Programcılar - Bir ana yönteminden programı başlangıcını yapar? Evet, bu durumda haklısınız; IOS uygulamaları ayrıca ana yöntemlerden başlar.
Sizin ana sınıfı aşağıdaki işlevini çağırır:

UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); 

UIApplicationMain bir UIApplication nesnesi oluşturur Kakao Dokunmatik çalıştırmak döngü ve uygulama altyapısını başladı.Uygulamamızın içeriğe ihtiyacı çok objektif-c bunu işlemek için bir temsilci kullanıyor. Bu yüzden biz buna AppDelegate diyoruz (UIApplication delege olarak hareket et). Bu delegenin bazı isteğe bağlı yöntemlerini uygularız ve buna göre davranır.

+0

lütfen birisi bana yukarıdaki cevapta yanlış olanları anlamamı sağlayabilir –

+2

Şaşkın görünüyor çünkü a) doğru noktalama/yazım/dilbilgisi kullanmıyorsunuz, b) konu dışı olduğu için konu dışıdır. Orijinal posteri sordu. – Kay

-1

@Shivam, teşekkürler. Ben appDelegate arasında anladığım

, bir Application Android'de ne yakındır. viewDidLoad, viewDidDisappear, Android'in Yaşam Döngüsü ile karşılaştırılabilir. Her uygulamanın, gelen aramalardan gelen kesintilere, bildirimlerin görünmesine kadar bir yaşam döngüsü vardır. Bu olayları gerçekleştiğinde özel bir şey yapmak için kodunuza ihtiyacınız varsa, o zaman yöntemleri kod yazmanız gerekir.

Android'de, bu tür sistem olaylarını işlemek için , onDestroy, onCreate kinda geri çağırma yöntemlerini kullanıyoruz.

+0

Android'in “onPause”, “onCreate” ve “onDestroy” yöntemleri, iOS View Controller'ın kullanım ömrünün “viewDidDisappear”, “viewDidLoad” yöntemlerine daha benzer. Eğer karşılaştırmanız gerekiyorsa, Android'in “Uygulama” sınıfının iOS'un “AppDelegate” e yakın olacağını söyleyebilirim. –

+0

Teşekkürler, eğer cevabımı daha iyi yapabilirseniz lütfen yapın. Cevabımı okuduktan sonra sileceğim. – Siddharth

İlgili konular