1

セッターの実装は、ivar を新しい値に割り当てる前に、新しい値が古い値と異なるかどうかを最初にチェックしますか?

プロパティが合成される方法のすべての異なる順列 (属性、、、などassignに応じて) を示すドキュメント (またはソース コード) リファレンスはありますか?retain

4

2 に答える 2

2

アサインセッターが最初に以前の値をチェックすることは想像できません。結果はどちらの方法でも同じになるため、これは CPU サイクルの完全な無駄になります。ドキュメントには、さまざまな属性のセマンティクスが明示的に記載されていますが、どのコードが合成されるかは正確には示されていません。

于 2011-11-03T17:52:43.770 に答える
1

これについては、 Objective-Cのドキュメントで説明されています。実際に何が起こるかの詳細は、実装固有です。

copy
オブジェクトのコピーを割り当てに使用する必要があることを指定します。以前の値はリリース メッセージで送信されます。コピーは、copy メソッドを呼び出すことによって作成されます。この属性は、NSCopying プロトコルを実装する必要があるオブジェクト タイプに対してのみ有効です。

assign
セッターが単純な代入を使用することを指定します。この属性はデフォルトです。この属性は、NSInteger や CGRect などのスカラー型に使用します。

割り当て時にオブジェクトに対して保持
を呼び出す必要があることを指定します。以前の値はリリース メッセージで送信されます。

...

nonatomic
アクセサが非アトミックであることを指定します。デフォルトでは、アクセサーはアトミックです。

...

[_internal lock]; // lock using an object-level lock
id result = [[value retain] autorelease];
[_internal unlock];
return result;
于 2011-11-03T17:50:35.973 に答える