2012-02-04 10 views
3

Objective-Cはクラスのconstインスタンス変数をサポートしていないので、変数の値が変更されないようにするためのいくつかの選択肢は何ですか?私はプリプロセッサ#definesに頼らず、クラス変数が好きなので使いたくありません。また、constインスタンス変数がサポートされていない理由はありますか?Objective-Cのconstインスタンス変数の代わりに?

答えて

5

Objective-Cのオブジェクトは、C++またはJavaのオブジェクトとは異なる方法で構築されます。 initメソッドが呼び出される前に、allocメソッドによってすべてのインスタンス変数がゼロに初期化されるため、initが呼び出されてconstインスタンス変数が変更されるまでには遅すぎます。明らかに、コンパイラの作者は、initメソッドでconstインスタンス変数を変更することをサポートするようにコンパイラを変更することができましたが、そうしていません。

通常、インスタンス変数@privateを作成し、アクセサメソッドを使用して公開します。インスタンス変数の値を変更したくない場合は、セッターメソッドを公開せず、クラス実装の変数を変更しないでください。

32ビットMac OS Xのサポートを中止する場合は、@interfaceの代わりに@implementationにインスタンス変数を入れることができます。これにより、他のクラスの干渉から完全に保護されます。

+0

完璧、ありがとう。 – fdh

+0

'@ instance' ??あなたは '@interface'と言ったのですか?私は '@ instance'キーワードを聞いたことがなく、最新のXcodeはそれについても_(ハイライトまたは完全)_と言うことはあまりありません。 –

+0

はい、私は '@ interface'を意味しました。それを指摘してくれてありがとう。 –

関連する問題