簡體   English   中英

iPhone ABPeoplePickerNavigationController內存泄漏

[英]iPhone ABPeoplePickerNavigationController Memory Leaks

我正在通過我的應用程序消除所有內存泄漏,分析工具使用abpeoplepickernavigationcontroller發現泄漏。

我明白這與復制方法有關嗎? 但不知道如何在寫入時間和地點釋放它。

我基本上需要提供模態視圖,選擇phonenumber然后將其拖回文本字段。 繼承我的代碼

-(IBAction)openAddressBook{

    ABPeoplePickerNavigationController *peoplepicker = [[ABPeoplePickerNavigationController alloc] init];

    peoplepicker.peoplePickerDelegate = self;
    [self presentModalViewController:peoplepicker animated:YES];
    [peoplepicker release];

}

- (void)peoplePickerNavigationControllerDidCancel:

(ABPeoplePickerNavigationController *)peoplePicker {

    [self dismissModalViewControllerAnimated:YES];

}

- (BOOL)peoplePickerNavigationController:(ABPeoplePickerNavigationController *)peoplePicker 
      shouldContinueAfterSelectingPerson:(ABRecordRef)person
{
    return YES;
}

- (BOOL)peoplePickerNavigationController:(ABPeoplePickerNavigationController *)peoplePicker
      shouldContinueAfterSelectingPerson:(ABRecordRef)person 
                                property:(ABPropertyID)property identifier:(ABMultiValueIdentifier)identifier
{


    //Retrieving the phone number property of ABRecordRef

    ABMultiValueRef phoneProperty = ABRecordCopyValue(person, property);
    NSString *phone = (NSString *)ABMultiValueCopyValueAtIndex(phoneProperty, identifier);
    phone = [phone stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
    NSArray *brokenNumber = [phone componentsSeparatedByString:@" "];
    phone = [brokenNumber componentsJoinedByString:@""];

    if(![phonenumber.text isEqualToString:@""])
        phonenumber.text = [NSString stringWithFormat:@"%@%@", phonenumber.text, @";"];
    phonenumber.text = [NSString stringWithFormat:@"%@%@", phonenumber.text, phone];

    [self dismissModalViewControllerAnimated:YES];
    return NO;

}

謝謝

問題可能在這里:

ABMultiValueRef phoneProperty = ABRecordCopyValue(person, property);
NSString *phone = (NSString *)ABMultiValueCopyValueAtIndex(phoneProperty, identifier);
phone = [phone stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];

您可以使用ABRecordCopyValueABMultiValueCopyValueAtIndex獲取對象副本 ,但不會釋放它們。

ABMultiValueRef phoneProperty = ABRecordCopyValue(person, property);
NSString *phone = (NSString *)ABMultiValueCopyValueAtIndex(phoneProperty, identifier);
if (phoneProperty) {
    CFRelease(phoneProperty);
}

NSString *trimmedPhone = [phone stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
if (phone) {
    CFRelease(phone);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM