静的変数を保持しておく必要はありませんが、プログラムの実行中は放置していても保持されます。私はstatic NSString *foobar;
ような、あなたは静的オブジェクトポインタを意味すると仮定してい https://github.com/magicalpanda/MagicalRecord/blob/master/Source/Categories/NSManagedObjectContext+MagicalRecord.m#L24-29なぜ静的変数を保持するのですか?
答えて
:
は、このコードを参照してください。
このような変数は実際にはアプリケーションと同じ長さですが、私たちが話している変数はポインタのみです。 Objective-Cでは、オブジェクトは常に動的に割り当てられているので、常に型のポインタを使ってオブジェクトのアドレスを指定しますが、オブジェクトの基になるデータは動的に割り当てられた野生の青いyonderにまだ存在します。
オブジェクトへポインタがスコープの外に出ることは決してありませんが、オブジェクト自体はただ、他のオブジェクトと同じように割り当て解除することができ、かつので、あなたのポインタはゴミを指していることになります、ので、あなたはまだオブジェクトを保持しなければなりません、より悪いことに、別の無関係のオブジェクト。
ジョナサンGrynspanの受け入れ答えの簡易版:
retain
は、オブジェクトを指す変数のためではありません。その変数はになります。 retain
は、変数が指すオブジェクト用です。 retain
がなければ、オブジェクトは割り当てを解除することができます。次に、sigabrt
を引き起こすものを指す変数があります。この変数がどこにも指し示されていないことは、「ダングリングポインタ」として知られています。 ARCの文脈では、行うための最善のことは、強いとして静的変数を宣言
をあるので、このような何か:
static ThatClass * __strong thatStaticVariable;
これはthatStaticVariable
ポイントが有効なオブジェクト(すなわちになるためのことを、そのオブジェクトを確保しますいったん割り当てられると、割り当て解除されることはありません)。それがデフォルト(そうsayeth the docs、おかげで@zpasternackする)、これだけ
static ThatClass *thatStaticVariable;
を使用すると、あなたは良いしているだからはしかし、あなたが実際には、まったく__strongキーワードは必要ありません。
注:アプリケーションが動作している間は、いつも=
ARCの下で、明示的な所有権修飾子のない保持可能なオブジェクトは暗黙的に__strongなので、sayeth [the docs](http://clang.llvm.org/docs/AutomaticReferenceCounting.html#ownership.inference)です。 – zpasternack
- 1. なぜ「静的でない変数から静的なコンテキストから参照できないのですか?」
- 2. 関数スコープの静的変数がオブジェクトインスタンス間で持続するのはなぜですか?
- 3. 静的クラスに非静的メソッドと変数を使用できないのはなぜですか?
- 4. なぜ非静的変数を呼び出せないのですか?
- 5. 保護された静的メンバー変数
- 6. モデルビュープレゼンター:なぜモデルは静的ですか?
- 7. なぜ静的なコンポーネントをチェックインするのですか?
- 8. Eclipseで非最終的な静的変数を検索する
- 9. 最終的なクラス変数をGWTで静的にする
- 10. AS3プロトタイプ - 静的変数ですか?
- 11. どのように静的変数は保持されますが、Object.toStringハッシュコードは異なりますか?
- 12. 関数内静的変数と静的クラス変数の比較
- 13. 静的変数
- 14. 数学関数用の静的ライブラリがないのはなぜですか?
- 15. 簡単な質問:非静的関数がCで静的変数を変更することができ++
- 16. 静的メソッド内のローカル変数は、静的ていますか?
- 17. 静的バインディングがクラスと関数で異なるのはなぜですか?
- 18. データを保持しないC#での同時静的キュー
- 19. 静的メソッドと静的変数のjava
- 20. なぜ静的クラスは静的メンバーのみを持つことができますか?
- 21. 静的変数をリテラルでない値で初期化できないのはなぜですか?
- 22. このコレクションイニシャライザが静的になるのはなぜですか?
- 23. nullを返す静的メソッドから静的変数を呼び出すのがなぜNPEをスローしないのですか?
- 24. JavaScriptがなぜ変数を持ち上げるのですか?
- 25. パブリック静的変数とプライベート静的変数の違い
- 26. java:非静的変数を静的コンテキストから参照できないError
- 27. メソッドの静的なローカル変数は悪い習慣ですか?
- 28. 静的初心者:静的なクラス/メソッド内の静的でない変数は静的なことを暗示していますか?
- 29. コンテナの静的配列を保持することは可能ですか?
- 30. Androidの大規模な静的静的変数
ジョナサンは正しいです!引き渡された引数が自動解放プールにあり、メソッドが呼び出された直後に自動解放される場合はどうなりますか? - >静的ポインタにアクセスするとエラーが発生します(主にEXEC_BAD_ACCESS) –
Martin、小規模な修正:EXC_BAD_ACCESS(例外としてEXC)です。 – bneely
明確な説明をありがとう – Stavash