Swift の強い、弱い、所有されていない参照
【Objective-Cのプロパティ属性】
ARC
-タイプ[About]Automatic Reference Counting
に適用されるメモリを管理するメカニズムです。オブジェクトは、参照が 0 の場合にのみ割り当て解除されます。reference
Strong reference
- デフォルトで設定されており、このタイプを線形関係で安全に使用できます (ループはありません)。
Retain cycle
- それぞれのオブジェクトが互いに強い参照を持っている状況です
Retain cycle
:weak
と を分割しunowned
ます。どちらもオブジェクトの保持カウントを だけ増加させず、+1
次の違いがあります
Weak reference
- 参照オブジェクトの割り当てが解除された場合はnil
、参照もARC
設定 します。それが参照が変数である理由です(定数にすることはできません)[var vs let]そしてそれが理由ですweak
nil
weak
var
let
optional
weak var delegate: <Type>?
全般的
unowned
- 参照オブジェクトが解放された場合 ( であるnil
)、 は設定されていないためになりunowned
ません。そのため、参照はオプションではありませんnil
ARC
unowned
所有されていない(デフォルト)
safe unowned
-参照の割り当てが解除されruntime safety check
た場合に例外をスローするために使用しunowned
ます。
Fatal error: Attempted to read an unowned reference but object 0x7fa5dad3f0f0 was already deallocated
所有されていない(安全でない)
unowned(unsafe)
UnsafePointer
を作成できることによって動作しますdangling pointer
。__unsafe_unretained
からObjective-C
。これは、ARC
処理を行わない一種のダイレクト メモリ アクセスです。クラッシュだけでなく、予期しない動作を引き起こす可能性があります。それはより良いパフォーマンスを持っています
EXC_BAD_ACCESS
[EXC_BAD_ACCESS]
[閉鎖サンプル]