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. クラスの代わりに、インスタンス
- 2. グローバル変数の代わりに?
- 3. ObjectiveCの静的変数
- 4. getter関数の代わりにconst参照を使用できますか?
- 5. Javaの変数の代わりに変数のconentsを参照する方法
- 6. jQueryのis()関数の代わりに?
- 7. Goの関数オーバーロードの代わりに?
- 8. jqueryのロード関数の代わりに
- 9. 静的変数の代わりに使用するもの
- 10. クラスのインスタンス名の代わりにテキストを使用する
- 11. シェルに変数の代わりに文字列を代入する
- 12. ホバー関数jQueryの代わりにトグル
- 13. コピー&ペーストプログラミングの代わりに関数
- 14. 代わりに複数のカラーバー
- 15. URLDownloadToFile関数の代わりに
- 16. python:匿名関数の代わりに
- 17. セッション変数の代わりに上書きされます
- 18. 変数の代わりに静的型を使用
- 19. 値の代わりに変数を返します
- 20. セルの代わりに変数を持つVBA Goalseek
- 21. Oracle SQL:テーブル名の代わりに使用される変数
- 22. textbox.textの代わりにアプリケーション設定変数
- 23. GETメソッドの代わりにPHPセッション変数
- 24. の代わりに
- 25. システム変数(linux)の代わりにhome変数を使う方法は?
- 26. はconst char *をメソッドに渡しましたが、代わりにchar const *エラーを受け取りました
- 27. 小数点の代わりに小数点のカンマを使用する変数
- 28. C++はconst std :: string&の代わりに文字列リテラルを渡します。
- 29. QHashとQMapがconst Tの代わりにconst Tを返す理由は何ですか?
- 30. 新しいインスタンスを作成する代わりに値を変更する
完璧、ありがとう。 – fdh
'@ instance' ??あなたは '@interface'と言ったのですか?私は '@ instance'キーワードを聞いたことがなく、最新のXcodeはそれについても_(ハイライトまたは完全)_と言うことはあまりありません。 –
はい、私は '@ interface'を意味しました。それを指摘してくれてありがとう。 –