イニシャライザの返り値

サンプルソースを見ていると、各クラスのイニシャライザは

return self;

obj = [super init]
...
return obj;

というコードで、自身を返している。うーん何でだろう?

わが師匠し~くる氏に聞いてみたところ、

[hogeHoge alloc];
[hogeHoge init]

[[hogeHoge alloc] init]

と短縮して書ける。そして「親クラスのイニシャライズが成功したか否かの判別に使う」とのこと。

ふーむ、最初の用途は簡単に理解できる。[hogeHoge alloc] が自身(self)を返すから、[[hogeHoge init] alloc] = [self init] = [hogeHoge init] ということが言える。

でも、親クラスのイニシャライズの判別は、ちょっとわからない。なぜ、self にスーパークラスの返り値を入れることで、判別できるのだろう……?そもそも、親クラスのイニシャライズの成否を調べる場面が、今は思い浮かばない。

まぁ、ボチボチ調べていくことしますか。

(2013-04-10 追記)
今読み返してみると、内容が完全に「日本語でおk」な件。当時の俺は何を考えていたんだろう…。




  • blog/2005/2005-09-05.txt
  • 最終更新: 2015-01-06 11:51
  • (外部編集)