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

UIActivityViewController含网页链接时出现内存泄漏问题求助

UIActivityViewController 含网页链接时的内存泄漏问题

现象描述

展示并销毁带有网页链接的UIActivityViewController时,Leaks工具会检测到内存泄漏,具体情况如下:

  • 示例代码:
let textToShare = "Some text"
let urlToShare = URL(string: "https://apple.com")!
    
let activityViewController = UIActivityViewController(activityItems: [textToShare, urlToShare], applicationActivities: nil)

present(activityViewController, animated: true)
  • 泄漏情况:iOS 16.4模拟器中,首次检测出25处泄漏,销毁控制器后二次检测新增17处(泄漏数量不固定);若移除activityItems中的URL,泄漏完全消失。
  • 调试器报错:

[assertion] Error acquiring assertion: <Error Domain=RBSServiceErrorDomain Code=1 "target is not running or doesn't have entitlement com.apple.runningboard.assertions.webkit" UserInfo={NSLocalizedFailureReason=target is not running or doesn't have entitlement com.apple.runningboard.assertions.webkit}>

Could not signal service com.apple.WebKit.WebContent: 113: Could not find specified service

  • 测试验证:iOS 18.2真机+Xcode 16.1环境下问题复现一致。

原因

这是苹果系统框架的内部问题:当UIActivityViewController的activityItems包含URL时,会触发WebKit相关服务的初始化,但控制器销毁时,WebKit的部分内部对象未被正确释放;同时Runningboard权限断言获取失败,进一步导致相关资源无法正常回收。这类泄漏属于系统层面的问题,和业务代码逻辑无关。

解决/规避方案

  1. 替换URL为字符串:如果业务场景允许,把URL对象改成字符串传入activityItems,既不影响分享内容的展示,又能绕过触发WebKit泄漏的路径:
let textToShare = "Some text"
let urlString = "https://apple.com"

let activityViewController = UIActivityViewController(activityItems: [textToShare, urlString], applicationActivities: nil)
present(activityViewController, animated: true)
  1. 过滤系统泄漏:如果必须传入URL对象,可以在Leaks工具中过滤掉WebKit、Runningboard等系统框架的泄漏报告,只关注业务代码的内存问题——这类系统泄漏通常不会影响App的稳定性。
  2. 提交苹果反馈:通过苹果反馈助手提交问题,附上测试代码、Leaks截图和报错日志,等待苹果修复系统层面的漏洞。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 03:39:58