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

RequestDeviceConfigurationChange传递OSObject的所有权及release时机问询

问题解答

1. 何时调用release()?

你当前第一个代码块的写法是正确的:无论RequestDeviceConfigurationChange返回成功还是失败,都需要在调用代码中对newOSBufferSize调用release()。

因为OSNumber::withNumber返回的对象引用计数初始为1,你作为创建者拥有这个对象的所有权,必须负责释放它,除非有明确的API文档说明该函数会接管对象所有权(即调用retain)。Xcode的泄漏提示也验证了这一点——如果不调用release(),对象会一直存在导致内存泄漏。

2. RequestDeviceConfigurationChange的行为

它不会保留传入的OSObject,也不会在PerformDeviceConfigurationChange执行完毕后自动释放该对象。

理由有两点:

  • 若它保留了对象,你在调用成功后就无需手动release()(所有权已转移),但Xcode明确提示不调用会泄漏,说明你仍需承担释放责任;
  • 在PerformDeviceConfigurationChange中,Xcode提示调用release()会错误减少未拥有对象的引用计数,说明该函数从未调用过retain获取对象所有权,自然也不会负责释放它。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 21:12:14