[解決済み] Objective-Cでは、なぜself = [super init]がnilでないことを確認する必要があるのですか?
2022-04-24 04:12:34
質問
Objective-Cのinitメソッドの書き方について、一般的な質問があります。
initメソッドは初期化を続ける前にself = [super init]がnilでないことをチェックすべきであると、あらゆるところ(Appleのコード、書籍、オープンソース・コードなど)で見かけます。
initメソッドのAppleのデフォルトテンプレートは。
- (id) init
{
self = [super init];
if (self != nil)
{
// your code here
}
return self;
}
なぜ?
つまり、initがnilを返すことはあるのでしょうか?NSObjectでinitを呼んでnilが返ってくるなら、よっぽど何かが狂っているんだろう?その場合は、プログラムを書かないほうがいいかもしれませんね...。
クラスのinitメソッドがnilを返すことは、本当によくあることなのでしょうか?もしそうなら、どんな場合に、そしてなぜ?
解決方法は?
例えば
[[NSData alloc] initWithContentsOfFile:@"this/path/doesn't/exist/"];
[[NSImage alloc] initWithContentsOfFile:@"unsupportedFormat.sjt"];
[NSImage imageNamed:@"AnImageThatIsntInTheImageCache"];
...といった具合です。(注意: NSData はファイルが存在しない場合、例外を投げるかもしれません)。問題が発生したときに nil を返すことが期待される動作である領域はかなり多く、このため、一貫性を保つために、ほとんど常に nil をチェックすることが標準的なプラクティスとなっています。
関連
-
[解決済み] FBLoginVIewをカスタマイズするには?
-
[解決済み] Objective-Cで乱数を発生させる
-
[解決済み] Objective-Cで、ある文字列が他の文字列を含んでいるかどうかを調べるにはどうすればよいですか?
-
[解決済み] クラス vs. #インポート
-
[解決済み] Objective-Cで、オブジェクトの種類をテストするにはどうしたらいいですか?
-
[解決済み] Objective-Cで抽象クラスを作成する
-
[解決済み] Xcode 4でNSZombieEnabledを設定するにはどうすればよいですか?
-
[解決済み】キーボードを簡単に解除する方法は?
-
[解決済み】浮動小数点以下が2桁しか表示されないようにする
-
[解決済み】ストーリーボードで、複数のコントローラで使用するためのカスタムセルを作成する方法は?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】何が原因か。switch文からこのcaseラベルにジャンプできない [重複]。
-
[解決済み] Objective-Cは構造体の使用を禁じていますか?
-
[解決済み] Xcodeでコンソールに何かを印刷するには?
-
[解決済み] プロジェクト内の単一ファイルのARCを無効にするにはどうしたらいいですか?
-
[解決済み] Objective-Cのtypedef enumとは何ですか?
-
[解決済み] NSStringをNSNumberに変換する方法
-
[解決済み] Xcode 4でNSZombieEnabledを設定するにはどうすればよいですか?
-
[解決済み] メソッド名と行番号を出力し、NSLogを条件付きで無効にする方法は?
-
[解決済み】メインスレッドでタスクを実行するGCD
-
[解決済み】iOS7でステータスバーを隠すことができない。