Objective c __电桥传输和桥释放在ARC代码中有不同的结果

Objective c __电桥传输和桥释放在ARC代码中有不同的结果,objective-c,automatic-ref-counting,Objective C,Automatic Ref Counting,CfBridgegRelease应与ARC中的\uu bridge\u transfer相同,但在我的代码中,它们有不同的结果 int main(int argc, const char * argv[]) { @autoreleasepool { CFMutableArrayRef cfObject = CFArrayCreateMutable(kCFAllocatorDefault, 0, NULL); printf("retain count = %

CfBridgegRelease
应与ARC中的
\uu bridge\u transfer
相同,但在我的代码中,它们有不同的结果

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        CFMutableArrayRef cfObject = CFArrayCreateMutable(kCFAllocatorDefault, 0, NULL);
        printf("retain count = %ld\n", CFGetRetainCount(cfObject));
        //id obj = (__bridge_transfer id)(cfObject);
        id obj = CFBridgingRelease(cfObject);
        printf("retain count after the cast = %ld\n", CFGetRetainCount(cfObject));
        NSLog(@"class=%@", obj);

    }
    return 0;
}
如果使用
\uuuu桥接\uu传输
,结果如下:

retain count = 1
retain count after the cast = 1
2018-04-27 11:02:28.945866+0800 P01[2344:1638938] class=()
retain count = 1
retain count after the cast = 2
2018-04-27 11:03:30.795628+0800 P01[2363:1658495] class=()
如果使用CfBrigingRelease,结果如下:

retain count = 1
retain count after the cast = 1
2018-04-27 11:02:28.945866+0800 P01[2344:1638938] class=()
retain count = 1
retain count after the cast = 2
2018-04-27 11:03:30.795628+0800 P01[2363:1658495] class=()
不同的结果只发生在Mac命令行工具中。
如果我把代码放在iOS应用程序中,结果是一样的。困惑

桥接之后,对象现在处于ARC内存管理之下。CFTypeRef完全无效。您应该查看
obj
,而不是
cfObject
,您应该查看其
retainCount
,而不是
CFRetainCount
。(但你当然不能这样做,因为这是ARC。事实上,你不应该以任何一种方式查看任何对象的保留计数。只要做正确的内存管理,然后继续。如果你做对了,你既不会泄漏也不会挂起,这才是最重要的。)@matt:不
CfBrigingRelease
或多或少只返回
(uuu bridge\u transfer id)X
?是的,但它会在等号的左侧返回它,如
obj
。在传输后CFTypeRef发生了什么是没有意义的。我只是重复我自己…@matt,谢谢你的解释。