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权限断言获取失败,进一步导致相关资源无法正常回收。这类泄漏属于系统层面的问题,和业务代码逻辑无关。
解决/规避方案
- 替换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)
- 过滤系统泄漏:如果必须传入URL对象,可以在Leaks工具中过滤掉WebKit、Runningboard等系统框架的泄漏报告,只关注业务代码的内存问题——这类系统泄漏通常不会影响App的稳定性。
- 提交苹果反馈:通过苹果反馈助手提交问题,附上测试代码、Leaks截图和报错日志,等待苹果修复系统层面的漏洞。
内容的提问来源于stack exchange,提问作者vlad_skazka
相关产品推荐
相关产品推荐

