北海道苫小牧市出身の初老PGが書くブログ

永遠のプログラマを夢見る、苫小牧市出身のおじさんのちらしの裏

コンストラクタを書いてみる

コンストラクタの書き方すら忘れてます。*1

  • self = [super init]しなきゃだめ
  • return selfしなきゃだめ
  • allocを呼んでinitしなきゃだめ*2
  • initはnilを返すこともある

しかもObjective-Cnilに対してメッセージ送れるので、コンストラクタ書き間違えて変数がnilの状態でもしばらくはエラー出さずに動くのです。ハマったハマった。

ところで、

If it can’t be initialized, they should release the object and return nil.

...中略...

Every class must guarantee that the init method either returns a fully functional instance of the class or raises an exception.

NSObject#init

って書いてあるんですが、どっちが正しいんでしょう? 色んなコード見る限りはnil返すってのがありうるパターンだと思うんですが、nilは"a fully functional instance"なんでしょうか? それに、initでexceptionを投げる場合もあるんでしょうか?

*1:via: Javaのコンストラクタ(1) Javaのコンストラクタ(2)

*2:newメッセージでもいいよ