我尝试使用 NSProxy 来包装对象并在 (forwardInvocation:) 中创建一个代理实例作为调用的 retValue,但不能在 ARC 中释放所有 proxyon 实例。我困扰了很久。
github 上的演示:https ://github.com/JorrisRaghan/proxyon
你可以看到控制台日志:
DEALLOC PP对象:...
DEALLOC Proxyon:Class< PPObject >
但没有 DEALLOC Proxyon:id< PPObject >"。
您还可以使用 Instruments 来检查内存泄漏。
所以我需要你的帮助来解决它,谢谢!
更新:我发现这个泄漏来自 forwardInvocation:
void *proxyon = (__bridge_retained void *)[Proxyon proxyonWithInstance:obj];
[anInvocation setReturnValue:&proxyon];
我将 PPObject 设置为 retVal 而不是 Proxyon 实例,并且在 PPObject 中发生了泄漏,所以我猜 -[NSInvocation setReturnValue:] 是关键。但是如何解决呢?