Objective-Cはクラスのconstインスタンス変数をサポートしていないので、変数の値が変更されないようにするためのいくつかの選択肢は何ですか?私はプリプロセッサ#definesに頼らず、クラス変数が好きなので使いたくありません。また、constインスタンス変数がサポートされていない理由はありますか?Objective-Cのconstインスタンス変数の代わりに?
3
A
答えて
5
Objective-Cのオブジェクトは、C++またはJavaのオブジェクトとは異なる方法で構築されます。 init
メソッドが呼び出される前に、alloc
メソッドによってすべてのインスタンス変数がゼロに初期化されるため、init
が呼び出されてconst
インスタンス変数が変更されるまでには遅すぎます。明らかに、コンパイラの作者は、init
メソッドでconst
インスタンス変数を変更することをサポートするようにコンパイラを変更することができましたが、そうしていません。
通常、インスタンス変数@private
を作成し、アクセサメソッドを使用して公開します。インスタンス変数の値を変更したくない場合は、セッターメソッドを公開せず、クラス実装の変数を変更しないでください。
32ビットMac OS Xのサポートを中止する場合は、@interface
の代わりに@implementation
にインスタンス変数を入れることができます。これにより、他のクラスの干渉から完全に保護されます。
関連する問題
- 1. 変数宣言の代わりにconstを使用したヌルポインタ
- 2. クラスの代わりに、インスタンス
- 3. グローバル変数の代わりに
- 4. セッション変数の代わりに
- 5. グローバル変数の代わりに?
- 6. 入れ変数の代わりの値
- 7. ObjectiveCの静的変数
- 8. インスタンス変数をローカル変数に代入
- 9. getter関数の代わりにconst参照を使用できますか?
- 10. 戻り値const&const代入 - 逆アセンブリ
- 11. 値の代わりにクラスの変数へのアクセス
- 12. はUnityが代わりに1の複数のオブジェクトをインスタンス化し、クリック
- 13. Javaの変数の代わりに変数のconentsを参照する方法
- 14. Goの関数オーバーロードの代わりに?
- 15. jqueryのロード関数の代わりに
- 16. Matlabの "gather"関数の代わりに
- 17. postgresqlのtrunc関数の代わりに
- 18. 関数の代わりにコールバックのconsole.log
- 19. jQueryのis()関数の代わりに?
- 20. 複数のパラメータダッシュの代わりにスラッシュ
- 21. (代わりにエラーのインスタンスの発光値)postcss-カスタムプロパティ
- 22. Laravel 5.4とVue.js 2.0 Errorのインスタンスの代わりにEmitted値
- 23. クラスのインスタンス名の代わりにテキストを使用する
- 24. セルの代わりに変数内のデスティネーションストア
- 25. argparseのコマンドラインの代わりに変数から値を取得
- 26. 静的変数の代わりに使用するもの
- 27. Asp.Netコアのグローバル変数の代わりに?
- 28. Node.jsは変数の代わりに配列に `を入れる`
- 29. 変数名の代わりに変数の値を使用するlambda matlab
- 30. はconst char *をメソッドに渡しましたが、代わりにchar const *エラーを受け取りました
完璧、ありがとう。 – fdh
'@ instance' ??あなたは '@interface'と言ったのですか?私は '@ instance'キーワードを聞いたことがなく、最新のXcodeはそれについても_(ハイライトまたは完全)_と言うことはあまりありません。 –
はい、私は '@ interface'を意味しました。それを指摘してくれてありがとう。 –