サニティーチェック。これを考えると:
@property (readwrite, nonatomic) NSDate *start;
それでは、これらの 2 行のコードは同一ではありませんか?
バージョン 1:
self.start.description
バージョン 2:
[self.start description]
つまり、start.description はオブジェクトのdescription
メソッドを呼び出しstart
ます。
サニティーチェック。これを考えると:
@property (readwrite, nonatomic) NSDate *start;
それでは、これらの 2 行のコードは同一ではありませんか?
バージョン 1:
self.start.description
バージョン 2:
[self.start description]
つまり、start.description はオブジェクトのdescription
メソッドを呼び出しstart
ます。
はい、それらは同一であり、そうです[[self start] description]
基本的にはい。
プロパティの周りには、自動同期されるセッターとゲッターがあります。@syncronize ステートメントを使用する場合、setter、getter、およびプロパティの命名方法に影響を与える機会があります。自動同期する場合、プロパティの名前は _start です。getter 名は start で、setter 名は setStart です。
そう
something = self.start
実際にゲッターを呼び出し、
self.start = something
セッターを呼び出します。同等のものは次のとおりです。
something = [self start];
[self setStart:something];
インスタンス変数に直接アクセスしたい場合は、次のようにします。
_start = something;
something = _start;
使用するだけの場合@synthesize start;
、同等のものは次のようになります。
start = something;
something = start;
これは紛らわしいかもしれませんが、実際にはセッター/ゲッターを使用しstart
ながらインスタンス変数をアドレス指定します。self.start
この違いは、ARC を使用しない場合に非常に重要になります。プロパティ パラメーター (たとえば、割り当て、コピー、保持など) に応じて、自動生成されたゲッターとセッターがメモリ管理を行いますが、インスタンス変数を直接操作する場合、メモリ管理はユーザーに任されます。
はい。結果はどちらの場合も同じになります。プロパティは(ほとんど)従来のCocoaスタイルで記述されたアクセサメソッドの周りの砂糖です。
いくつかの小さな内部の違いがあるので、私は「ほとんど」と言います。プロパティは、ObjectiveCクラスのランタイム記述にメタデータとして追加されます。いくつかの考察を介して、そのように宣言されたプロパティのリストを見つけることができます。このリストは、getter/setterのスタイルで名前が付けられているメソッドのリストとは異なります。