IDE が自動で付けてくれるから、各々の意味が良くわからない、という話しを聴きました happy_ryo です。
この属性を理解しないまま、property のセッター/ゲッターを自身で定義すると面倒な事になる場合もあるので、今回はそれぞれの属性の簡単なまとめを書きます。
property 自体が値を所有する時の属性
assign
整数や、文字列型の property にこれをつけます。この属性のついた property は値がセットされる時、引き渡された値を property へそのまま代入します。
strong
この属性が指定された property に対して値がセットされる時、既にセットされている値がある場合は release が行われ、引き渡された値に対して retain が行われてから、property に値がセットされます。
copy
この属性が指定された property に対して値がセットされる時は、strong の場合と異なり、渡された値のコピーがセットされます。
property 自体は値を所有しない時の属性
weak
渡された値が retain されないまま property にセットされます。
セットされている値が retain されて居ないので、既に値がセットされていても release は行われません。渡された値が破棄された場合、property には nil がセットされます。
unsafe_unretained
渡された値が、retain されないまま property にセットされます。 weak と違い、渡された値が破棄された場合でも property の値を nil に書き換えません。
property の読み書きに関する属性
readonly
この属性を指定すると property に対して、コンパイラがアクセサメソッドを合成する場合に、ゲッターのみしか生成しなくなります。
readwrite
この属性が指定されていると、コンパイラがアクセサメソッドを合成する場合に、セッター/ゲッターの両方を生成します。
その他
nonatomic
通常、コンパイラがプロパティに対してアクセサメソッドを合成する場合、それらのメソッドはアトミック性が保証されるが、nonatomic 属性を指定すると、アトミック性が失われます。nonatomic を指定しないと、property は atomic として扱われますが、パフォーマンスが低下するため推奨されません。
営業→工場で作業→Word&Excel→Java→shellscript→Java→PHP→Python→Objective-C→Swift→PHP→JavaScript→ベトナム 子会社CTO→本社CTO←イマココ