0

サニティーチェック。これを考えると:

@property (readwrite, nonatomic) NSDate *start;

それでは、これらの 2 行のコードは同一ではありませんか?

バージョン 1:

self.start.description

バージョン 2:

[self.start description]

つまり、start.description はオブジェクトのdescriptionメソッドを呼び出しstartます。

4

3 に答える 3

2

はい、それらは同一であり、そうです[[self start] description]

于 2013-02-14T11:04:49.667 に答える
2

基本的にはい。

プロパティの周りには、自動同期されるセッターとゲッターがあります。@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 を使用しない場合に非常に重要になります。プロパティ パラメーター (たとえば、割り当て、コピー、保持など) に応じて、自動生成されたゲッターとセッターがメモリ管理を行いますが、インスタンス変数を直接操作する場合、メモリ管理はユーザーに任されます。

于 2013-02-14T11:11:13.647 に答える
1

はい。結果はどちらの場合も同じになります。プロパティは(ほとんど)従来のCocoaスタイルで記述されたアクセサメソッドの周りの砂糖です。

いくつかの小さな内部の違いがあるので、私は「ほとんど」と言います。プロパティは、ObjectiveCクラスのランタイム記述にメタデータとして追加されます。いくつかの考察を介して、そのように宣言されたプロパティのリストを見つけることができます。このリストは、getter/setterのスタイルで名前が付けられているメソッドのリストとは異なります。

于 2013-02-14T11:04:12.977 に答える