SwiftはARCを使用しているが、ARCはプロパティや変数からインスタンスへの参照がいくつあるかを参照カウント(英語ではリファレンスカウント)としてカウントしていて、その参照カウントが0になると、メモリから解放される。
class Hoge { let name: String init(name: String) { self.name = name } } var iremono: Hoge? = Hoge(name:"ほげ") //カウント1 iremono = nil //カウント0
何も設定しない場合は強参照になってそのカウントが追加されるのですが、その強参照のインスタンスと強参照のインスタンスがお互いに呼び合うとずっとメモリが解放されず循環参照になってしまいます。
そうならないために必要な弱参照の宣言weak
とunowned
これらは参照カウントを増やさないようになります。
では、それぞれ何が違うのか
unowned 非所有参照
weak 弱参照
とりあえず、nilの可能性がないならunowned。不明な箇所はweakで。