2016-03-28 20 views
1

Objective-C için oldukça yeni ama C# konusunda oldukça fazla deneyime sahibim. Objective-C'deki bazı bağımlılık enjeksiyon çerçevelerini incelemeye çalışıyorum. Bazı çerçevelere bakarken, Objective-C sınıfındaki kurucular/Initializers'lar açısından çok farklı bir şey buldum. Objective c başlatıcıları ile belirsizlik

i aşağıdaki gibi bir yapıcı aracılığıyla bir nesne enjekte istiyorsanız

,

-(id)initWithService:(id<ServiceProtocol>)service; 

elbette bu varsayılan yapıcı olmayacaktır ve bu diğer bazı yerden denir kadar kontrol buraya girmeyecektir. Bu nesne enjekte edildiğinde, varsayılan kurucu ve denetim buraya gider.

yalnızca -(id)init.

Bu yüzden numaralı telefondan -(id)init numaralı telefondan arama yapıp yapamayacağımı merak ediyorum.

Ya da her sınıf için iki başlatıcı yalnızca başlatıcı ile yapıcıyı yalnızca alay sırasında kullanır ve çerçeve tarafından otomatik başlatma işlemi sırasında dikkate almaz mı? Burada yazılı olarak

+0

belirlenmiş Başlatıcı kullanmak olduğunu eğer Sadece alay aracını tatmin etmek için farklı bir şey yapıyorsun, yanlış yapıyorsun. – Avi

+0

Dürüst olmak gerekirse, herhangi bir aracı kullanmak istemiyorum. Bu basit objektif-C sorusu. Özel init yapamazsan ne yapardın, ama sadece init yapabilirsin. – golldy

+0

"initWithService:" [atanan başlatıcınız] (http://stackoverflow.com/a/26186421/2976878) ve belki de [init 'init'] seçeneğini yapmak istediğiniz gibi geliyor (https://craftbeercraftcode.com/2014/12/28/better-brewing-with-ns_unavailable /) bunun için varsayılan bir değeriniz yoksa. – Hamish

cevap

-2


https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/ProgrammingWithObjectiveC/Introduction/Introduction.html#//apple_ref/doc/uid/TP40011210-CH1-SW1
iyi uygulama gerçekten tam olarak senaryoyu takip etmiyorum ama fikrimi beyan edeceğiz böyle bir şekilde

-(instanceType)initWithYourNeeds:(SomeClassName *)obj 
{ 
    if(self==[super init]) 
    { 
     //do some stuff here 
    } 
    retur self; 
} 
+0

Sorumu doğru anladığınızdan emin değilim. Nesnelerle baş edemezsen ne yapardın? – golldy

+1

Başlatma işlemini gerçekleştirdikten sonra bir özellik belirlersiniz. Bu, xib yükleme mekanizmasının hangi başlatıcı tarafından çağrıldığı üzerinde denetiminiz olmadığı için, xib'den görünümler yüklerken yaygındır. – Avi