2009-04-03 12 views
1

xCode 3では、プライベートインスタンス変数をクラスに定義しました。クライアントコードのprivate変数に直接アクセスすると、コンパイラはなぜエラーではなく警告を表示しますか?コードは引き続き実行できます。この警告は、これが将来的には難しいエラーであると言います。 「ハードエラー」とはどういう意味ですか?ありがとう。Objective-Cのプライベートインスタンス変数について

答えて

0

さて、ハードエラーは、警告ではなく将来的にエラーになることを意味します。なぜそれが今の警告なのか分かりません。クラスに存在しないメソッドを呼び出そうとすると、それは警告に過ぎないという同じ理由があると思います。

+0

Objective-Cの動的性質のため、クラスに存在しないメソッドを呼び出すことができます。コンパイラがコンパイル時にそれを知っているかどうかにかかわらず、実行時にクラスにメッセージを送ることができます。 – Abizern

+0

私は、メンバ変数が(PHPのように)同じように動作するかもしれないと考えていました。 –

1

ハードエラーとは、将来的にコンパイラが動作するように動作する(つまり、定義された可視範囲外のインスタンス変数に直接アクセスするときにソースファイルをコンパイルしない)ことを意味します。

現在のところ、コンパイラはObjective-Cに可視性の制限を強制していません。しかし、あなたがしてはいけないことをやっていることを思い出させ、あなたが偶然にそれをした場合に注意を促すという警告がそこにあります。

私は、なぜ可視性が強制されないのかを推測しなければならない場合は、FoundationライブラリとCoreFoundationライブラリの間にあるフリーダイヤルのブリッジングで、おそらく厳密に言えば、可視ではならないインスタンス変数にアクセスするライブラリコード。

一般に、とにかくインスタンス変数に直接アクセスするのは悪い考えです。 Obj-C 2.0を使用できる限り、純粋なデータモデルオブジェクトを設計する場合は、プロパティのようなものを使用する方が良いでしょう。

関連する問題