2011-06-23 11 views
7

"Use coredata" işaretli xcode Gezinme denetleyicisi şablonuna dayanan çok sayıda basit test uygulaması yaparak coredata öğreniyorum.awakeFromNib'in faydaları?

Uygulama temsilcisindeki awakeFromNib yöntemi benim için bir sorun kaynağı oldu, çünkü denetleyiciye başka görünümler ekliyorum ve yükleme sırasını değiştiriyorum, böylece RootViewController ikinci veya üçüncü seçenek olabilir.

AwakeFromNib'in ne yaptığını çözdüm ve uygulamayı kaldırdığım için uygulama temsilcisi artık belirli bir görünüme bağlı değil. (Bu yüzden RootViewController'ı yüklemek istediğimde, onu normal bir görünüm olarak yüklerim ve görünüm için managedObjectContext'i başlatmak için kendi viewDidLoad kullanırım).

Soruma soru: AppDelegate'de awakeFromNIb kullanarak performans kazancı veya başka avantajlar var mı? veya viewDidLoad yönteminden yaptığım gibi aynı şeyi yapmanın başka bir yolu mu?

cevap

5

Tüm yöntemler farklı zamanlarda ve farklı durumlarda yanar. Bir sınıfla ilişkili nib dosyası diske yüklendiğinde,

awakeFromNib çağrılır. Bir uç sahibi olabilecek herhangi bir sınıf onu kullanabilir. viewDidLoad yalnızca görüntü denetleyicileri tarafından kullanılır. Genellikle nib'den yükleme yaparken çağrılır, ancak bellekte oluşturulan bir görünümle de çağrılabilir (çok nadir durumda).

Her iki durumda da, yalnızca bir kez çalıştırmak istediğinizde işlevsellik koyarsınız. örnek ilk yüklenir. Örneğin. Ortak bir nubie hatası, görünümü her göründüğünde çalışması gereken viewDidLoad kodunu koymalıdır. Detay görünümü açan ana görünümde belirtin ve ayrıntı görünümü reddedildiğinde yeniden görünün. Ana görünümün kodu viewDidLoad ise, yalnızca ana görünümün ilk kez çalıştırılacağını ancak ana görünümün kaybolup tekrar görünmeyeceği ilk seferde çalışacaktır.

Genelde başka herhangi bir görünümü başlatmıyorsunuz veya uygulama temsilcisinin elinden bir şey yapmıyorsunuz. Bu genellikle applicationDidFinishLaunching'da gerçekleştirilir.

+0

Tamam, teşekkürler. App delegesinde awakeFromNib'den kurtulmanın ve başlatma kodunun viewDidLoad'a taşınmasının performansı düşürebileceğinden endişeleniyordum. – nick