Created
September 28, 2018 09:42
-
-
Save ktanaka117/e55a3611e081bd481ed06915d0d1450b to your computer and use it in GitHub Desktop.
よそから参照されていない、weak参照のプロパティは即座に解放されるという話。
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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