SORU
24 ŞUBAT 2011, PERŞEMBE


Biri UİViewController bir doğum süreci aşağıdaki gibi olan açıklayabilir mi?

Orada pek çok yöntem geçersiz kılmak için, gibi initWithNibname:, awakeFromNib, loadView, viewDidLoad, viewDidAppear:, layoutSubviews, ve ben karar veremezsin hangi sipariş alıyor, Bu yöntemi denir.

Ben sadece onlardan biri geçersiz kılma "kalp".

Herhangi bir ayrıntılı açıklaması?

CEVAP
24 ŞUBAT 2011, PERŞEMBE


Bir çok perde arkasında neler Cocoa view and viewController management ile.

1. Bu viewController nesne

En temel şekliyle, bir viewController genel denetleyici bir nesnedir. Önce başlatılmış bir ayrılan zaman, görünümü ile ilişkilendirilmiş nesne yok. Görünümü (ve eğer) gerekli olduğu örneği. Yani, görünümü dikkate almadan, bir viewController ömrü başka bir nesne aynıdır:

UIViewController * myVC = [[UIViewController alloc] initWith...];
...
[myVC release];

ViewControllers için belirlenmiş başlatıcı -initWithNibname:bundle:. Bir ucu belirtirseniz, viewController otomatik olarak yüklenecektir bu uç kendi görünümünü yükleyebilir ve tanımladığınız herhangi bir İBOutlets (bkz: daha fazla ayrıntı için aşağıya bağlayın.

2. Yükleme ve boşaltma görüntüleyin

Bir viewController gerektiğinde kendi görüş yükleyecektir. Bu genellikle -view yöntemi ilk kez çağrıldığında olur, ve herhangi bir zamanda gerçekleşebilir programında, UI başlatmak ne kadar bağlı. Görünümü de yok edilebilir ve programın ömrü boyunca birkaç kez, ağan senin UI durumuna bağlı olarak yeniden. Bu viewController manzarası gerekli ama henüz yüklü olduğunu tespit etti, -loadView yöntemi çağrılır. Temel ileti akışı şöyle:

view
  loadView
  viewDidLoad

Sana -view yöntem, -loadView viewDidLoad geçersiz kılma otomatik olarak silinir. Eğer geçersiz kılmak -loadViewgerekirbu viewController view özelliğini ayarlayın. Aksi halde, 20* *Bir sonraki çağrı yükleme işlemini yeniden tetikleyecektir.

Görünümü de sadece nil 21 *özelliğini ayarlayarak programın ömrü boyunca herhangi bir zamanda kaldırılmış olabilir. -didReceiveMemoryWarning varsayılan uygulama otomatik olarak bu görünüm bir superview (yani şu anda etkin görünümü hiyerarşiyi bir parçası değildir) sahip olmadığı sürece işe yarar. Mesaj şöyle: akış

view = nil
   viewDidUnload

2a. Yükleme görünümü programlı

Eğer -loadView, geçersiz kılmak isterseniz bir manzara, subviews, diğer viewControllers ve lütfen herhangi bir şekilde bu nesneler arasında herhangi bir bağlantı oluşturabilirsiniz. Tabii ki, bu da oluşturduğunuz nesnelere saygı ile bellek yönetimi sorumlu olduğunuz anlamına gelir. Eğer alt -loadView, geçersiz kılar başlatıldı nibName bundle hem nil kullanarak olmalıdır.

2b. Yükleme bir kalem ucu manzarası

Eğer kullandığınız bir uç dosya, varsayılan uygulama -loadView otomatik olarak açık uç dosyasını, örneğini nesneleri, ekleme herhangi bir bağlantıları arasında, ilgilen, bellek yönetimi için.

Her şey çok perde arkasında olur çünkü ucu dosyaları ile biraz daha zor olsun. -awakeFromNib yöntemi denirher nesnebu uç bir dosya yüklendiğinde örneği, uç ve dosyadaki diğer nesneleri denir tam olarak yüklenmiş olacak garanti diye bir şey yok.

3. Görüntüler sergileyen

-viewWillAppear:, -viewDidAppear:, -viewWillDisappear: ve -viewDidDisappear: görünümü görüntülendiğinde sadece adı veya ekran, özellikle başka bir görünüm, animasyonlu transistions sırasında gizlidir. Bu yöntemler, görüş ve navigasyon düzeni ile takas olarak birçok kez senin programın ömrü boyunca, çağrılabilir.

4. Görünüm düzeni

-layoutSubviews yöntemdirdeğilUIViewController parçası. Kendi sınırları değiştirildi UIView nesneleri denir. Eğer UIView programın alt sınıf bir özel kullanıyorsanız, bu yöntem Kakao varsayılan autoresizing yöntemleri güvenmek yerine özel küme düzeni yapmak için kullanılabilir.

5. Hepsini bir araya getirirsek

Karmaşıklığı nedeniyle, ortaya bu işlem için birçok farklı yolu vardır, ama normal bir zaman çizelgesi şöyle olabilir:

-[viewController initWithNibname:Bundle:]
-[viewController awakeFromNib]
-[viewController loadView]
-[view awakeFromNib]
-[viewController viewDidLoad]
-[viewController viewWillAppear]
-[viewController viewDidAppear]
...
-[viewController viewWillDisappear]  // user navigated away
-[viewController viewDidDisappear]
...
-[viewController viewWillAppear]     // user navigated back
-[viewController viewDidAppear]
...
-[viewController viewWillDisappear]  // user navigated away
-[viewController viewDidDisappear]
...
-[viewController setView:nil]        // memory warning, perhaps
-[viewController viewDidUnload]
...
-[viewController loadView]           // user navigated back
-[view awakeFromNib]
-[viewController viewDidLoad]
-[viewController viewWillAppear]
-[viewController viewDidAppear]
...

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • ArkticPlanet

    ArkticPlanet

    9 ŞUBAT 2010
  • HuskyStarcraft

    HuskyStarcra

    4 HAZİRAN 2009
  • tatermoog

    tatermoog

    2 AĞUSTOS 2006