Skip to content

Instantly share code, notes, and snippets.

@ktanaka117
Created September 28, 2018 09:42
Show Gist options
  • Save ktanaka117/e55a3611e081bd481ed06915d0d1450b to your computer and use it in GitHub Desktop.
Save ktanaka117/e55a3611e081bd481ed06915d0d1450b to your computer and use it in GitHub Desktop.
よそから参照されていない、weak参照のプロパティは即座に解放されるという話。
import UIKit
class ViewController: UIViewController {
var presenter: Presenter!
func inject(presenter: Presenter) {
self.presenter = presenter
}
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
presenter.viewDidAppear()
}
func transition() {
present(UIViewController(), animated: true)
}
}
class Presenter {
weak var view: ViewController!
weak var router: Router! // <- weakでもつ
    // ↑はweak属性なしでよい
init(view: ViewController, router: Router) {
self.view = view
self.router = Router(view: view) // <- Warning: Instance will be immediately deallocated because property 'router' is 'weak'
}
func viewDidAppear() {
router.transition() // <- Error: Thread 1: Fatal error: Unexpectedly found nil while unwrapping an Optional value
}
}
class Router {
weak var view: ViewController! // <- weakでもつ
init(view: ViewController) {
self.view = view
}
func transition() {
view.transition()
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment