intは常に0に初期化されますか?
質問
をあてにして大丈夫でしょうか?
int
は常に0に初期化されるのでしょうか?
具体的には
int
を持つオブジェクトが新しくインスタンス化された場合、その ivars は値 0 であると仮定してもよいのでしょうか?
どのように解決するのですか?
はい、クラスのインスタンス変数は常に0に初期化されます(または
nil
,
NULL
または
false
というように、正確なデータ型に依存する)。 を参照してください。
Objective-C 2.0 プログラミング言語
:
は
alloc
メソッドは新しいオブジェクトのインスタンス変数のためのメモリを動的に確保し、それらをすべて 0 に初期化します。isa
変数以外はすべて 0 に初期化されます。
2013-05-08 を編集
Appleは上記のドキュメントを削除したようです(現在はThe Wayback Machineにリンクされています)。 (現在) 有効なドキュメント
Objective-C でプログラミングする
には、同様の引用が含まれています。
は
alloc
メソッドにはもうひとつ重要な仕事があります。それは、オブジェクトのプロパティのために割り当てられたメモリをゼロに設定してクリアすることです。これは、以前に保存されていたものからゴミを含むメモリという通常の問題を回避しますが、オブジェクトを完全に初期化するには十分ではありません。
ただし、これは だけ であり、グローバルスコープで宣言された POD 型にも当てはまります。
// At global scope
int a_global_var; // guaranteed to be 0
NSString *a_global_string; // guaranteed to be nil
一つの例外を除いて、それは
ではない
で割り当てられたデータには適用されません。
malloc()
または
realloc()
についても同様です。
calloc()
にも当てはまります。
calloc()
は割り当てるメモリを明示的にゼロにするからです。
1 つの例外は、自動参照カウント (ARC) が有効な場合、Objective-C オブジェクトへのスタックポインタが暗黙のうちに
nil
に初期化されます。しかし、明示的に
nil
. から
ARC リリースノートへの移行
:
スタック変数の初期化には
nil
ARC を使用すると、strong, weak, autoreleasing スタック変数が暗黙のうちに
nil
C++では(Objective-C++で使われているC++オブジェクトも)、クラスインスタンス変数が ではなく ゼロ初期化されません。 コンストラクタで明示的に初期化する必要があります。
関連
-
[解決済み] JavaScriptで変数が存在するか(定義されているか/初期化されているか)をチェックする
-
[解決済み] NSIntegerとintの使い分けについて
-
[解決済み] ループの前に変数を宣言するのか、ループの中で宣言するのかの違い?
-
[解決済み】Javaの「ダブルブレース初期化」の効率化?
-
[解決済み】UIButtonに複数行のテキストを追加する方法は?
-
[解決済み】ARCでブロックに自己の弱参照を必ず渡す?
-
[解決済み] Objective-Cのデリゲートには通常、retainではなくassignというプロパティが与えられるのはなぜですか?
-
[解決済み] IOSのUIViewからアプリケーションのドキュメントフォルダに画像を保存する
-
[解決済み] delphiの変数はデフォルトで値で初期化されるのですか?
-
[解決済み] NSAutoreleasePoolのオートリリース・プールはどのように機能するのですか?
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] 配列型 'int [16]' は代入不可能です。
-
[解決済み] IOSのUIViewからアプリケーションのドキュメントフォルダに画像を保存する
-
[解決済み] performSelectorの使用: メソッドを呼び出すだけと比較した場合
-
[解決済み] 「アプリケーションはアクティブなコントローラを表示しようとした」?
-
[解決済み] UIButtonのテキストを変更する
-
[解決済み] iOS8 - 高さがゼロであることを示唆する曖昧な制約
-
[解決済み] Category is implementing method which will be implemented by its primary class" の警告を抑制する。
-
[解決済み] Objective-CのReadonlyプロパティ?
-
[解決済み] ViewController の respondsToSelector: 割り当て解除されたインスタンスにメッセージが送信される (CRASH)
-
[解決済み] writeToFile:atomically:はデータを上書きするのか?