当前位置 : 主页 > 手机开发 > ios >

ios – 调用函数’ABRecordCopyValue’返回一个带有1个保留计数的corefoundation对象

来源:互联网 收集:自由互联 发布时间:2021-06-11
我的项目中有以下代码 - (BOOL)peoplePickerNavigationController:(ABPeoplePickerNavigationController *)peoplePicker shouldContinueAfterSelectingPerson:(ABRecordRef)person { [popContactsForm dismissPopoverAnimated:YES]; [ssemailvc set
我的项目中有以下代码

- (BOOL)peoplePickerNavigationController:
(ABPeoplePickerNavigationController *)peoplePicker
      shouldContinueAfterSelectingPerson:(ABRecordRef)person {

    [popContactsForm dismissPopoverAnimated:YES];

    [ssemailvc setName: (NSString *)ABRecordCopyValue(person,kABPersonFirstNameProperty)];        
    ABMultiValueRef emails = (NSString *)ABRecordCopyValue(person,kABPersonEmailProperty);


    if (ABMultiValueGetCount(emails)>0) {
        [ssemailvc setEmail:(NSString *)ABMultiValueCopyValueAtIndex(emails,0)];
    }else [ssemailvc setEmail:@""];

    CFRelease(emails);


    [peoplePicker dismissModalViewControllerAnimated:YES];      
    [popEmailForm setPopoverContentSize:CGSizeMake(350.0, 225.0)];

    return NO;
}

我收到了警告

1.call to function ‘ABRecordCopyValue’ returns a corefoundation object with a +1 retain count
2.object leaked:allocated object is not referenced later in the execution and has a retain count of +1

请告诉我如何克服这个问题

如果使用ARC,则可以使用桥接转换:

CFStringRef name = (CFStringRef)ABRecordCopyValue(person,kABPersonFirstNameProperty);
[ssemailvc setName:(__bridge NSString*)name];
CFRelease(name);

或桥接转移:

NSString * name = (__bridge_transfer NSString *)ABRecordCopyValue(person,kABPersonFirstNameProperty);
[ssemailvc setName:name];

如果您使用的是MRC:

CFStringRef name = (CFStringRef)ABRecordCopyValue(person,kABPersonFirstNameProperty);
[ssemailvc setName:(NSString*)name];
CFRelease(name);
网友评论