追記について 追記が増えたので以下の記事を新たに作成しました。こちらと合わせてご参照ください。 Swiftの循環参照問題におけるunownedとweakの使い分けについて はじめに クロージャーは定義したスコープの定数や変数をキャプチャすることができます。このキャプチャのおかげでインスタンス変数を定義して、値を保持する必要がなくケースがあるので便利に活用しています。ただキャプチャ値を利用する場合は、循環参照を考慮したコードを記述する必要があります。循環参照に陥ると双方のインスタンスがメモリ上から開放されず、メモリリークの原因になります。 クロージャの循環参照と回避方法 クロージャが循環参照をしている例です。 selfがクロージャを強参照し、クロージャがselfを強参照して循環参照に陥っています。 HTMLElementインスタンスはasHTMLプロパティで() -> Stringクロージャ
![Swiftのクロージャにおける循環参照問題でunownedとweakの使い分けがわからない - Qiita](https://cdn-ak-scissors.b.st-hatena.com/image/square/c54d13dae5b2d61e8d2a54e6c829df13621d09b2/height=288;version=1;width=512/https%3A%2F%2Fqiita-user-contents.imgix.net%2Fhttps%253A%252F%252Fcdn.qiita.com%252Fassets%252Fpublic%252Farticle-ogp-background-9f5428127621718a910c8b63951390ad.png%3Fixlib%3Drb-4.0.0%26w%3D1200%26mark64%3DaHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZ3PTkxNiZoPTMzNiZ0eHQ9U3dpZnQlRTMlODElQUUlRTMlODIlQUYlRTMlODMlQUQlRTMlODMlQkMlRTMlODIlQjglRTMlODMlQTMlRTMlODElQUIlRTMlODElOEElRTMlODElOTElRTMlODIlOEIlRTUlQkUlQUElRTclOTIlQjAlRTUlOEYlODIlRTclODUlQTclRTUlOTUlOEYlRTklQTElOEMlRTMlODElQTd1bm93bmVkJUUzJTgxJUE4d2VhayVFMyU4MSVBRSVFNCVCRCVCRiVFMyU4MSU4NCVFNSU4OCU4NiVFMyU4MSU5MSVFMyU4MSU4QyVFMyU4MiU4RiVFMyU4MSU4QiVFMyU4MiU4OSVFMyU4MSVBQSVFMyU4MSU4NCZ0eHQtY29sb3I9JTIzMjEyMTIxJnR4dC1mb250PUhpcmFnaW5vJTIwU2FucyUyMFc2JnR4dC1zaXplPTU2JnR4dC1jbGlwPWVsbGlwc2lzJnR4dC1hbGlnbj1sZWZ0JTJDdG9wJnM9YzBmMTU0MWE4NGFjNDlhZGJhNjkyOGViNTUyYmVhOGM%26mark-x%3D142%26mark-y%3D112%26blend64%3DaHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZ3PTYxNiZ0eHQ9JTQwc3VzaWV5eSZ0eHQtY29sb3I9JTIzMjEyMTIxJnR4dC1mb250PUhpcmFnaW5vJTIwU2FucyUyMFc2JnR4dC1zaXplPTM2JnR4dC1hbGlnbj1sZWZ0JTJDdG9wJnM9ZWFiZjc0NGI5YTQyNDJkMmM5MjZiYzU3N2NmZjNjNjk%26blend-x%3D142%26blend-y%3D491%26blend-mode%3Dnormal%26s%3D623c0da28a58c14fb3590d2fc17be46a)