You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WKWebView在iOS15模拟器调用load方法崩溃(iOS14正常)如何修复?

WKWebView iOS15 调用load方法崩溃修复方案

exc_bad_access (code=1 address=0x10) 错误本质是系统尝试访问已释放的WKWebViewConfiguration相关属性对象,该问题为iOS15系统对WKWebView生命周期逻辑变更导致的兼容性问题,具体修复方案如下:

  • 调整WKWebView初始化和属性配置时序,所有WKWebViewConfiguration的属性修改必须在WKWebView初始化完成前做完,禁止初始化完成后修改configuration的任意属性,Swift/OC逻辑一致
    // 正确写法:先配置完所有configuration参数,再初始化WKWebView
    let config = WKWebViewConfiguration()
    config.preferences.javaScriptEnabled = true
    config.processPool = WKProcessPool.shared
    config.userContentController = WKUserContentController()
    // 所有config配置完成后再初始化webView
    let webView = WKWebView(frame: .zero, configuration: config)
    // 初始化完成后再调用load方法
    webView.load(URLRequest(url: URL(string: "https://example.com")!))
    

    错误写法:初始化WKWebView后再修改configuration属性,再调用load,iOS15必现崩溃

    let config = WKWebViewConfiguration()
    let webView = WKWebView(frame: .zero, configuration: config)
    // 初始化后修改config属性,iOS15触发野指针
    config.preferences.javaScriptEnabled = true
    webView.load(URLRequest(url: URL(string: "https://example.com")!))
    
  • 检查WKWebView的持有方式,确保调用load方法到页面加载完成前,webView被强引用持有,不要用weak var持有刚初始化还没调用load的webView
  • 如果是在SwiftUI中使用UIViewRepresentable封装WKWebView,要确保makeUIView方法中完成所有配置和load操作,不要在updateUIView中调用load方法或者修改configuration属性
  • 针对模拟器独有崩溃的额外校验:如果只有iOS15模拟器崩溃,真机正常,检查是否开启了Xcode的线程 sanitizer(TSAN),iOS15模拟器的WKWebView和TSAN有已知兼容性冲突,关闭TSAN后再测试即可

内容的提问来源于stack exchange,提问作者phnmnn

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 15:06:06