iOS bridge vs bridge_transfer [英] iOS bridge vs bridge_transfer

查看:161
本文介绍了iOS bridge vs bridge_transfer的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我对 bridge bridge_transfer 感到困惑,这是正确的吗?

I'm confused with bridge and bridge_transfer, is this correct?

-(void)getData{
    ABAddressBookRef addressBook = ABAddressBookCreate();
    NSArray *allPeople = (__bridge_transfer NSArray*)ABAddressBookCopyArrayOfAllPeople(addressBook);

    NSString *name;
    for ( int i = 0; i < [allPeople count]; i++ )
    {
        name = (__bridge_transfer NSString *) ABRecordCopyValue((__bridge ABRecordRef)[allPeople objectAtIndex:i], kABPersonFirstNameProperty);
    }
    CFRelease(addressBook);
    allPeople = nil;
}

有没有人可以解释我如何使用它们?

Is there anyone who can explain me how to use them?

推荐答案

如果您启用了自动引用计数(ARC),则代码是正确的。

If you have automatic-reference-counting (ARC) turned on, the code is correct.

您的对帐单中有两个 __ bridge_transfer 。因此,创建的CFObjects的所有权将转移到NSObjects。如果您打开了ARC,它们将自动释放。如果您使用 __ bridge 代替这两个语句,则需要显式调用 CFRelease 来释放由<创建的CFObjects code> *复制 API。

There are two __bridge_transfer in your statements. As a result, the ownership of created CFObjects will be transferred to NSObjects. If you have ARC turned on, they will be freed up automatically. If you used __bridge instead for these 2 statements, you will need to explicitly call CFRelease to release CFObjects created by the *Copy API.

__ bridge 语句也是正确的。因为您在CF API中引用了NSObject。您没有转让所有权,因此ARC将其释放。

The __bridge statement is also correct. Because you are referencing an NSObject in CF API. You are not transferring ownership, so that ARC will free it up.

这篇关于iOS bridge vs bridge_transfer的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆