メモリ周りについて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()
のように関数で囲むことで,期待通りの挙動を確認することができました.