LoginSignup
0
0

More than 1 year has passed since last update.

Playgroundsで試す時には実行部分を関数で囲んだ方がいい

Posted at

メモリ周りについてplaygroundsを使って試している日のこと
viewのメモリが解放された時,プロパティのmodelのメモリも解放されるはず...」

class Model {
    weak var viewController: ViewController?
    init() {}
    deinit{ print("model is released") }
}
class ViewController: UIViewController {
    let model: Model
    init(model: Model) {
        self.model = model
        super.init(nibName: nil, bundle: nil)
    }

    required init?(coder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
    deinit{
        print("view is released") 
    }
}

let model = Model()
var viewController: ViewController? = ViewController(model: model)
model.viewController = viewController
viewController = nil
view is released

「あれ,model is releasedも出力されるはずなのに」

試行錯誤しているうちに,modelが参照されっぱなしであることに気づきました.


func main() {
    let model = Model()
    var viewController: ViewController? = ViewController(model: model)
    model.viewController = viewController
    viewController = nil
}

main()

のように関数で囲むことで,期待通りの挙動を確認することができました.

0
0
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
0
0