2016-04-02 24 views
1

Zaten böyle bir soru cevaplandı, ancak, ben cevabından memnun değildi: Why does AppDelegate inherit from UIResponder?.Neden sınıf AppDelegate UIResponder'den miras alıyor?

Bir iOS uygulamasının mimarisini anlamaya çalıştığım için daha ayrıntılı bilgiler istiyorum.

Bildiğim kadarıyla UIResponder, dış güçlere (yani dokunma olayları, hareket olayları, vb.) "Yanıt veren" şeylere yöneliktir. Bir uygulamanın başlatılması nasıl bir UIResponder olmalı? Belki de AppDelegate örneğinin ne yaptığını anlamıyorum.

+0

Ben şimdi AppDelegate ne anlama düşünüyorum: https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIApplicationDelegate_Protocol/index .Html? hl = ar. Bununla birlikte, hala AppDelegate'in UIResponder'den miras aldığından emin değilim. –

+2

Harici olayların yalnızca fiziksel etkileşimlerin değil, çeşitli türlerde olabileceğini unutmayın. Örneğin, arka plan modlarına cevap vermek (arka plana gitmek, diğer uygulamalar gerektiğinde sesi durdurmak vb.), UIResponder’in yönetmesi gereken şeylerdir. Temsilci modelini takiben, uygulamanın kendisini (yani, UIApplication'ın) yönetmesi beklenir, ancak uygun bir nesneye (uygulama temsilcisi) delege eder. –

+0

Teşekkürler, AlejandroIván. Bu yüzden, açıklığa kavuşturayım (uygun bir terminoloji eksikliğiyle): UIApplication her uygulamaya özgü iken UIResponder işletim sistemini kapsar. Yanılıyorsam lütfen beni düzeltin. –

cevap

3

Uygulama temsilci sınıfı UIResponder'den miras alır.

Bu, temsilci örneğinin yanıtlayıcı zincirine katılabilmesi ve böylece uygulama düzeyinde eylemleri gerçekleştirebilmesidir.

Düzenleme: app temsilci olaylara son sözü alır: Bir adım 6 var

iOS 5 gibi. IOS 5 ile başlayarak, uygulama temsilcisi UIResponder'den ve daha önce olduğu gibi artık NSObject'ten miras almaz.

Kısaca: Görünümün bir görünüm denetleyicisine sahip olması durumunda, önce görünüm, hiyerarşinin üst kısmına kadar pencerenin yanındaki süper görüntüdür. Oraya 'dan uygulama ve son olarak uygulama delegesine.

Uygulama yanıtının potansiyel yanıtlayıcı olarak eklenmesi, nadiren (hiç değilse) alt sınıf UIApplication veya UIWindow olduğundan bir karşılama eklemesidir. Ancak, yalnızca penceresini oluşturmak ve rootViewController'ı uygulamasına eklemek için her zaman kendi uygulama temsilcisimiz vardır: didFinishLaunching… delege yöntemi. Yani bu, tüm görüş hiyerarşisinde yok ise, yanıt verenin geri dönmesi için de facto en iyi yer olan olur.

Alındığı:

https://www.cocoanetics.com/2012/09/the-amazing-responder-chain/

+0

Tamam, bu mantıklı. Yanıtlayıcı zinciri nasıl çalışır? –

+0

Düzenlenmiş cevaba bakınız. Eski ama alakalı. – Roee84

+1

@SirJony https://developer.apple.com/library/ios/documentation/EventHandling/Conceptual/EventHandlingiPhoneOS/event_delivery_responder_chain/event_delivery_responder_chain.html –