Edited at

iOS11からweakの扱いが変わった?

以下のコードには問題があります。

しかし、iOS11では正常に動作し、 iOS10,9 ではクラッシュします。

通常であればクラッシュするのが正しいですが、

iOS11から動作が変わったよ〜など理由を知っている方がいましたら、コメントいただけると嬉しいです。

(Apple公式のソースなど)


問題のあるコード

import UIKit

import WebKit

class ViewController: UIViewController {

weak var webView: WKWebView!

override func viewDidLoad() {
super.viewDidLoad()
setupWebView()
}

private func setupWebView() {
webView = WKWebView(frame: .zero) // UIView
webView.uiDelegate = self
webView.navigationDelegate = self
view.addSubview(webView)
webView.load(URLRequest(url: URL(string: "https://google.com")!))
}
}

extension ViewController: WKUIDelegate, WKNavigationDelegate { }

スクリーンショット 2018-04-13 15.04.34.png


問題を修正したコード

    private func setupWebView() {

let webView = WKWebView(frame: .zero)
webView.uiDelegate = self
webView.navigationDelegate = self
view.addSubview(webView)
webView.load(URLRequest(url: URL(string: "https://google.com")!))
self.webView = webView
}


なぜiOS11は問題の有るコードで動作するのか

求む :pray:


環境

Xcode 9.2

Original