2016-03-28 71 views
1

我对Objective-C很新,但在C#中有相当多的经验。我正在尝试检查Objective-C中的一些依赖注入框架。在研究一些框架的同时,我发现了一些与Objective-C类中的构造函数/初始化方法完全不同的东西。目标c初始化程序的歧义

如果我想通过像下面一个构造函数来注入对象,

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

当然,这不会是默认的构造函数,直到这是从别的地方称为控制不会在这里进入。

只有-(id)init是默认的构造函数,并且在注入此对象时控制权将进入此处。

所以我想知道如果它是一个很好的做法,从-(id)initinitWithService

或者对于每个类只有两个初始化程序仅在模拟过程中使用具有构造函数的初始化程序,并在框架的自动初始化过程中忽略它?

+0

我真的不按照你的情况完全是,但我会说出我的观点是,如果你为了满足一些嘲弄的工具,你正在做一些不同的事情,你做错了。 – Avi

+0

说实话,我不想使用任何工具。这是一个普通的Objective-C问题。如果你不能自定义init,你会怎么做,但你只能初始化。 – golldy

+0

听起来像你想做'initWithService:'[你指定的初始化程序](http://stackoverflow.com/a/26186421/2976878),甚至可能[make'init'不可用](https://craftbeercraftcode.com/2014/12/28/better-brewing-with-ns_unavailable /),如果您没有默认值。 – Hamish

回答

-2


作为写到这里https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/ProgrammingWithObjectiveC/Introduction/Introduction.html#//apple_ref/doc/uid/TP40011210-CH1-SW1
最好的做法是使用指定的初始化器以这样一种方式

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

我不确定你是否理解我的问题。如果你不能初始化对象,你会怎么做? – golldy

+1

您在执行初始化后设置属性。这在从xib加载视图时很常见,因为您无法控制由xib加载机制调用哪个初始化器。 – Avi