セッターの実装は、ivar を新しい値に割り当てる前に、新しい値が古い値と異なるかどうかを最初にチェックしますか?
プロパティが合成される方法のすべての異なる順列 (属性、、、などassign
に応じて) を示すドキュメント (またはソース コード) リファレンスはありますか?retain
セッターの実装は、ivar を新しい値に割り当てる前に、新しい値が古い値と異なるかどうかを最初にチェックしますか?
プロパティが合成される方法のすべての異なる順列 (属性、、、などassign
に応じて) を示すドキュメント (またはソース コード) リファレンスはありますか?retain
アサインセッターが最初に以前の値をチェックすることは想像できません。結果はどちらの方法でも同じになるため、これは CPU サイクルの完全な無駄になります。ドキュメントには、さまざまな属性のセマンティクスが明示的に記載されていますが、どのコードが合成されるかは正確には示されていません。
これについては、 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;