Objective c 语法self=[self init]在初始化方法中是否可以接受?

Objective c 语法self=[self init]在初始化方法中是否可以接受?,objective-c,initialization,self,Objective C,Initialization,Self,在某些情况下,self=[self init]在init方法中被调用,而不是在我回顾的代码中被调用[super init]。你认为这种语法是可以接受的吗?或者,如果导致使用[self init],这表明逻辑在某些方面是错误的(错误的模式) 例如(这可能是另一个例子) -(instancetype)初始化{ self=[super init]; //我的代码块 回归自我; } -(instancetype)initWithDelegate:(id)delegate{ self=[self init

在某些情况下,self=[self init]在init方法中被调用,而不是在我回顾的代码中被调用[super init]。你认为这种语法是可以接受的吗?或者,如果导致使用[self init],这表明逻辑在某些方面是错误的(错误的模式)

例如(这可能是另一个例子)

-(instancetype)初始化{
self=[super init];
//我的代码块
回归自我;
}
-(instancetype)initWithDelegate:(id)delegate{
self=[self init];//self=[super init]未被调用,因为需要实现“我的代码块”
如果(自我){
self.delegate=委托;
}
回归自我;
}

当self=[self init]正常时会出现这种情况吗?如果是,您有任何示例吗?

以上代码是反向的。指定的初始化器是
initWithDelegate:
(因为它是初始化所有属性的初始化器)。所以
init
应该调用
initWithDelegate:

- (instancetype)init {
  self = [self initWithDelegate:nil];
  return self;
}

- (instancetype)initWithDelegate:(id<MyDelegate>)delegate {
  self = [super init];
  if (self) {
    //my code block
    self.delegate = delegate;
  }
  return self;
}
-(instancetype)初始化{
self=[self initWithDelegate:nil];
回归自我;
}
-(instancetype)initWithDelegate:(id)delegate{
self=[super init];
如果(自我){
//我的代码块
self.delegate=委托;
}
回归自我;
}
有关如何在标题中正确注释指定的初始值设定项,请参阅

当然,每个人都应该倾听

对于
self=[self init]
是否正确这一基本问题,大多数应用程序级代码(即库之外的代码)都会令人惊讶。指定的初始值设定项通常是采用最多参数的初始值设定项,因此当存在多个初始值设定项时,
init
是最不可能的候选项。另一方面,
self=[self init…]
是非常常见和正确的

但是,在现有子类不受控制的代码中(例如,如果您提供了一个库),它很可能是从
init
开始的,其他初始值设定项是后来添加的。在这种情况下,保持
init
指定(这样现有的子类就不必重写)通常是明智的,在这种情况下,
self=[self init]
可能是正确的

- (instancetype)init {
  self = [self initWithDelegate:nil];
  return self;
}

- (instancetype)initWithDelegate:(id<MyDelegate>)delegate {
  self = [super init];
  if (self) {
    //my code block
    self.delegate = delegate;
  }
  return self;
}