Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/100.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 目标c初始值设定项的模糊性_Ios_Objective C_Constructor_Dependency Injection - Fatal编程技术网

Ios 目标c初始值设定项的模糊性

Ios 目标c初始值设定项的模糊性,ios,objective-c,constructor,dependency-injection,Ios,Objective C,Constructor,Dependency Injection,我对Objective-C相当陌生,但在C#方面有相当多的经验。我试图查看Objective-C中的一些依赖项注入框架。在查看一些框架时,我发现Objective-C类中的构造函数/初始值设定项有很大的不同 如果我想通过下面的构造函数注入一个对象 -(id)initWithService:(id<ServiceProtocol>)service; -(id)initWithService:(id)服务; 当然,这不是默认的构造函数,在从其他地方调用它之前,控件不会进入这里 只有-

我对Objective-C相当陌生,但在C#方面有相当多的经验。我试图查看Objective-C中的一些依赖项注入框架。在查看一些框架时,我发现Objective-C类中的构造函数/初始值设定项有很大的不同

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

-(id)initWithService:(id<ServiceProtocol>)service;
-(id)initWithService:(id)服务;
当然,这不是默认的构造函数,在从其他地方调用它之前,控件不会进入这里

只有
-(id)init
是默认构造函数,当注入此对象时,控件进入此处

所以我想知道从
-(id)init
调用
initWithService
是否是一种好的做法

或者对于每个类,只有两个初始值设定项仅在模拟期间使用带构造函数的初始值设定项,而在框架的自动初始化过程中忽略它


如本文所述
最佳做法是以这种方式使用指定的初始化器

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

我并不完全理解你的想法,但我会陈述我的观点,如果你只是为了满足某个嘲弄工具而做了一些不同的事情,那你就错了。老实说,我不想使用任何这样的工具。这是一个简单的客观问题。如果你不能自定义init,但只能初始化,你会怎么做?听起来你想让
initWithService:
,甚至可能没有默认值。我不确定你是否正确理解我的问题。如果无法使用对象初始化,您会怎么做?在执行初始化后设置属性。这在从xib加载视图时很常见,因为您无法控制xib加载机制调用哪个初始值设定项。