iOS bridge vs bridge_transfer [英] 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屋!