Upv*_*ote 2 objective-c xcode4.2 automatic-ref-counting
我将旧项目中的一些类复制到我的新项目中.我不得不删除所有release/autorelease语句,但我仍然有一些错误:
NSArray *allContacts = [(__bridge NSArray *)ABAddressBookCopyArrayOfAllPeople(addressBook)];
for (int i =0; i < allContacts.count; i++) {
ABRecordRef person = [allContacts objectAtIndex:i];
Run Code Online (Sandbox Code Playgroud)
在第一行我得到Expected identifier.在第三行,我得到implicit conversion of an Objective-C pointer to 'ABRecordRef (aka 'cpmnst void *)' is disallowed with ARC.
任何想法如何解决这一问题?
小智 6
考虑:
NSArray *allContacts = (__bridge NSArray *)ABAddressBookCopyArrayOfAllPeople(addressBook);
Run Code Online (Sandbox Code Playgroud)
名称包含的函数Copy返回调用者拥有的引用,这意味着调用者必须释放它.在ARC下,释放是自动的,但您需要告诉ARC该函数返回的引用由调用者拥有,因为函数声明缺少该信息.这是所有权转移的一个示例,您应该__bridge_transfer在这种情况下使用:
NSArray *allContacts = (__bridge_transfer NSArray *)ABAddressBookCopyArrayOfAllPeople(addressBook);
Run Code Online (Sandbox Code Playgroud)
在:
ABRecordRef person = [allContacts objectAtIndex:i];
Run Code Online (Sandbox Code Playgroud)
-objectAtIndex:返回不属于调用者的对象.由于您要将该对象分配给非对象类型(ABRecordRef),因此您需要一个简单的桥接转换:
ABRecordRef person = (__bridge ABRecordRef)[allContacts objectAtIndex:i];
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1576 次 |
| 最近记录: |