我是新来在我的项目中加入弧。我正在尝试了解 __bridge 及其小朋友,以便在从容器中添加和删除它们时正确地投射我的 CGImageRef。
我的一条线路上出现“存储的对象的潜在泄漏……”。这是我的代码的基本循环:
CGImageRef renderedRef = CGBitmapContextCreateImage(UIGraphicsGetCurrentContext());
[_array addObject: (__bridge_transfer id)renderedRef];//_array is an iVar
然后在路上的某个地方我这样做:
CGImageRef iRef = (__bridge_retained CGImageRef)array[0];
//then I do something fancy with iRef
//at the end of the method, I get "Potential leak of an object stored…"
//I have no idea what to do
//I've tried CGImageRelease(iRef); but it still doesn't change the warning.
有人可以对此有所了解吗?另外,我试过只使用 __bridge 但这并没有什么不同。
编辑1:
我扩展了分析器的结果并跟踪了正在发生的事情。这是因为我在这样的方法中使用 iRef:[self doSomethingFancy:iRef]; 在这种方法中,iRef 被保留但没有被释放。这样就解决了警告,但我仍然有点困惑。
我不太清楚何时使用各种 __bridge 演员表。在 ARC 下,以下是否会增加引用计数?
CGImageRef iRef = (__bridge CGImageRef)array[0];
另外,在某些时候,如果我告诉我的 _array iVar 删除所有对象,那会正确减少它们的引用计数吗?