CFArrayRef refAllPeople = ABAddressBookCopyArrayOfAllPeople( addressBook );
NSArray * arPeople = (__bridge_transfer NSArray*)(refAllPeople);
当我分析时说潜在的内存泄漏。
让我尝试了解。 refAllPeople具有1个引用计数。
然后我做_bridge_transfer。这将所有权移交给我。更确切地说,它指向arPeople并将保留计数加1。然后,由于_bridge_transfer等于(__bridge)后跟CFRelease,因此保留计数减少1。
所以,
为什么内存泄漏投诉?
最佳答案
您的理解是正确的。 __bridge_transfer
将把refAllPeople
带回到NSObject
所在的ARC
世界,您不必显式调用CFRelease
。
我相信这是一个静态分析仪错误。
来自文档(感谢卡尔)
(__bridge_transfer T)op将必须具有不可保留指针类型的操作数转换为目标类型,该目标类型必须是可保留对象的指针类型。 ARC将在封闭的全表达式结束时释放该值,但要对本地值进行通常的优化。