1

この記事を読みました: http://www.koboldtouch.com/display/IDCAR/Use+Classes+Instead+of+Structs

そして、ObjC アプリケーションで構造体の代わりにクラスを使用したいと考えていましたが、この記事では、もう少し多くのメモリが必要であると述べています。

この質問の選択された回答も読みました: Class vs Struct for data only? クラスの変数はデフォルトでプライベートになっていると言われていますが、C ++の場合、ObjCでデフォルトでプライベートになっていますか? ObjC に @property がある場合、別のオブジェクトからアクセスできるからではないと思います。

最後に、C 構造体のみを実装するオブジェクトを作成する場合、@public {} と @property の使用の違いは何ですか?

編集

将来の読者には、3 つの回答の両方を読む必要があります。すべての質問に回答しますが、選択して回答する必要があったため、1 つを選択しました。

4

3 に答える 3

2

クラスの変数はデフォルトでプライベートになっていると言われていますが、C ++の場合、ObjCでデフォルトでプライベートになっていますか?

@interfaceObjective-Cの で宣言されたインスタンス変数のデフォルトは@protectedです。@implementationObjective-Cの で宣言されたインスタンス変数のデフォルトは@privateです。C++ と同じように@public@protected,を手動で使用できます。@private

ObjC に @property がある場合、別のオブジェクトからアクセスできるからではないと思います。

プロパティ アクセスがメソッドを呼び出しています。インスタンス変数アクセスとは全く違います。

于 2013-11-13T02:05:11.427 に答える
2

最初は簡単な方法で実行してから、実際に実行されているコードのプロファイリングでメモリ フットプリントが大きすぎることが判明した場合は、再検討してください...

基本的に Obj-C クラスは構造体です。これは、クラス オブジェクトへのポインター、スーパー クラスによって宣言されたすべての ivar、およびそのクラスを持つ構造体です。

メモリ管理を容易にするためにクラスとオブジェクトを使用することで非常に多くのことを得ることができ、コレクション クラスを使用しないのは愚かなことです (非常に特殊な状況を除いて)。

2 番目の質問については、通常、常にプロパティを使用する必要があります。obj->iVar

これにより、カプセル化が維持され、セッターの検証も可能になります...そしてKVO通知も発生します。

だから基本的に:

理由がない限り、オブジェクト/クラスを使用してください。
使用しない理由がない限り、プロパティを使用してください。

于 2013-11-12T16:45:29.063 に答える