LoginSignup
1
2

More than 3 years have passed since last update.

キャプチャリストにおいて複数の変数に対して weak, unowned キーワードを付ける際の注意点

Posted at

今回はトレイリングクロージャにおけるキャプチャリストについての気づきをシェアします!
小ネタですが、意識しないと気づかずメモリリークを起こす原因になるような注意点です!

本題: 弱参照のつもりが、強参照に!?

ネットにあるコードを読んでいると、たまに、メモリリーク解消を目的とした弱参照を宣言するために、以下のような実装を見かけます。

alertController.addAction(UIAlertAction(title: "OK", style: .default) { [weak self, alertController] _ in

[weak 変数1, 変数2] のような実装になっていますね。
コードを読むと、どうやら 変数1 変数2 ともに weak 属性にして弱参照にしたいようです。
が、この実装では 変数2 が強参照になります

もう一度申し上げます。
変数2 は強参照です

対策

じゃあ、どうするか??
[weak 変数1, weak 変数2] とそれぞれの変数の前に weak を宣言することで実現可能です。
先程の UIAlertAction のトレイリングクロージャの例だと、

alertController.addAction(UIAlertAction(title: "OK", style: .default) { [weak self, weak alertController] _ in

となります。

おわり

メモリリークの原因になるので気をつけたいですね😵

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2