Objective-Cのプロパティとインスタンス変数の違いは?私はOOPの言葉でこれを理解する必要があります。プロパティの宣言は、インスタンス変数にアクセスするための便利なラッパー(実装では@synthesize)ですか?iPhone開発のObjective-Cプロパティ
ありがとう、
codecowboy
Objective-Cのプロパティとインスタンス変数の違いは?私はOOPの言葉でこれを理解する必要があります。プロパティの宣言は、インスタンス変数にアクセスするための便利なラッパー(実装では@synthesize)ですか?iPhone開発のObjective-Cプロパティ
ありがとう、
codecowboy
を見てくださいIVARためにあなたは、適切にするために生成される方法を制御与えるあなたは@propertyに定義することができ、様々な属性を持つプロパティとアイバーズは、2つの完全に異なるものです。
インスタンス変数はオブジェクト内に格納される変数であるため、各インスタンスにはそれぞれ独自の変数があります。これは、オブジェクトポインタ/ self(現在のランタイムではやや間接的ですが機能的には同等)に対するポインタの追加によって参照されます。 ivarsは一般にクラスの内部にあり、デフォルトではクラスとその子孫(@protected)のみがアクセスできます。メソッド内では、それらは修飾なしで利用できます。そうでなければ、間接的にobj-> ivarのようにアクセスすることはできません(まれにはありません)。
プロパティは、ゲッターとセッター(セッターはオプション)インターフェースを定義します。それはすべてです。
- (TYPE) propname;
- (void) setPropname: (TYPE) newPropname;
これらは、まったく同じように宣言した場合とまったく同じ方法で定義されます。これらのメソッドは、通常の構文([obj propname]および[obj setPropname:n])または現代のドット表記(obj.propnameまたはobj.propname = n)を使用して呼び出されます。これらの2つのオプションは構文的にのみ異なり、
メソッドを実装するには、自分でメソッドを記述するか、@synthesizeを使用するか、またはハンドリングするかのいずれかで実装する必要があります
プロパティは、同じ名前または異なる名前のもの(混乱を避けるために私の好み)とすることができます)、またはそうでないかもしれません。他のデータ。
、姓と名の連結を返すために(NSStringの*)フルネームを - 実装し、その後@property (nonatomic, readonly) NSString* fullname;
をして:
たとえば、あなたが持っているかもしれません。
あなたはかなりそこにいると思います。 @propertyと@synthesizeは、すでに宣言されているivarのアクセサー宣言と実装を行います。あなたも
財産とインスタンス IVARは、IVARまたはインスタンスにアクセスするために作成する必要があるのに対し、別のクラスで見ることができ、そのプロパティようにする変数の違いそのクラスのオブジェクトにアクセスしてアクセスできます。 @合成コンパイラはそのプロパティのセッターとゲッターを生成します。
- (TYPE)名;方法
-getter - (無効)のsetName:(TYPE)もしaName;セッターメソッド
これは私の混乱がある場所です。オブジェクトインスタンスも独自のプロパティを所有していませんか?オブジェクトの一般的な理解は、状態(データ)と動作(メソッド)に関する情報が含まれているということです。なぜインスタンス変数とプロパティが必要なのですか?プロパティとして宣言しない限り、インスタンス変数は不変ですか? – codecowboy
プロパティは、外部オブジェクトがデータを取得および設定するためのインターフェイスです。インスタンス変数はそのオブジェクトの内部にありますが、プロパティ、独自のgetter/setterメソッドを使用して外部オブジェクトに公開することも、作成する他のパブリックメソッドを介して間接的に公開することもできます。 –
つまり、プロパティー・ステートメントはインスタンス・オブジェクトに何かを作成しません。外の世界にオブジェクトから何かを得る方法を伝えるだけです。インスタンス変数か、getterメソッドとsetterメソッドを記述したい情報があれば、それがインスタンス変数になります。インスタンス変数に関しては、CやC++と同様にアクセスできます。 – Vagrant