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