繁体   English   中英

存储在“名称”中的对象的潜在泄漏

[英]Potential leak of an object stored into 'name'

这是我的代码:

[ NSUInteger peopleCounter = 0; //set a initial value as ZERO.

//Create custom Contacts list
for (peopleCounter = 0; peopleCounter < [arrayOfAllPeople count]; peopleCounter++) {

    ABRecordRef thisPerson = (__bridge ABRecordRef) [arrayOfAllPeople objectAtIndex:peopleCounter]; // get every person record one by one.

    NSString *name = (__bridge NSString *) ABRecordCopyCompositeName(thisPerson); //get a person name

    ABMultiValueRef number = ABRecordCopyValue(thisPerson, kABPersonPhoneProperty); //get a person number

    //optimize a phone numbers
    for (NSUInteger emailCounter = 0; emailCounter < ABMultiValueGetCount(number); emailCounter++) {

        NSString *email = (__bridge NSString *)ABMultiValueCopyValueAtIndex(number, emailCounter);
        ][1]

当您在其名称中使用带有副本的方法(如返回Core Foundation对象的ABRecordCopyCompositeName ,如CFStringRef您应该考虑内存管理,因为ARC不起作用,除非您告诉它应该如何处理情况。

在您的情况下,您应该使用__bridge_transfer而不是__bridge

NSString *name = (__bridge_transfer NSString *) ABRecordCopyCompositeName(thisPerson); //get a person name

所以ABRecordCopyCompositeName结果生命周期将链接到name变量生命周期。

请注意您的示例中的ABMultiValueCopyValueAtIndex

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM