__bridge_transfer会保留原始对象吗?

时间:2014-09-16 00:43:51

标签: ios automatic-ref-counting

有一个例子:

{
    CFMutableStringRef str = CFStringCreateMutableCopy(NULL, 1000, CFSTR("Hello World") );
    NSString *value = (__bridge_transfer NSString *)str ;
    NSLog(@"%@", value) ;
    CFRelease(str) ; // crash here
}

我知道我不应该释放str,因为所有者关系已转移到value,但在WWDC 2013视频Fixing Memory Issues中,有一张图片,似乎在使用时{{1} },它会将原始对象的保留计数增加1,我很困惑,任何人都可以帮忙吗? enter image description here

1 个答案:

答案 0 :(得分:0)

使用__bridge_transfer您将所有权从CoreFoundation转移到ARC。这也等同于调用CFBridgingRelease(str)。这实际上将对象从CoreFoundation移动到ARC的世界,ARC将负责释放对象。因此,您不会,也不得在CFRelease()上致电CFMutableStringRef

但是,您也可以使用不会触及对象所有权的__bridge(没有转移)。在这种情况下,您将负责使用CFRelease();

发布它