use*_*951 2 objective-c clang-static-analyzer automatic-ref-counting
CFArrayRef refAllPeople = ABAddressBookCopyArrayOfAllPeople( addressBook );
NSArray * arPeople = (__bridge_transfer NSArray*)(refAllPeople);
Run Code Online (Sandbox Code Playgroud)
当我分析它说潜在的内存泄漏.
让我试着去理解.refAllPeople有1个参考计数.
然后我做_ bridge _transfer.这将所有权转移给了我.更确切地说,它有arPeople指向它并将保留计数加1.然后保留计数减1,因为_ bridge _transfer等效于(__bridge)后跟CFRelease.
所以,
为什么内存泄漏投诉?
你的理解是正确的.__bridge_transfer将refAllPeople回到的世界NSObject在那里ARC工作,你不必显式调用CFRelease.
我相信这是一个静态的分析器错误.
来自文档(感谢卡尔)
(__bridge_transfer T)op将必须具有不可保留指针类型的操作数强制转换为目标类型,该目标类型必须是可保留的对象指针类型.ARC将在封闭的完整表达式的末尾释放值,这取决于对本地值的通常优化.
| 归档时间: |
|
| 查看次数: |
1545 次 |
| 最近记录: |