0

明らかに異なる理由で、この同じアプリの他の部分で 48 バイトの strdup リークを経験したため、この時点で、これらのリークが CoreData 関連であるかどうかはわかりません - 私の他の質問を参照してください:別のスタックオーバーフローの質問

しかし、関係がないと仮定すると、オプションを選択したユーザーに基づいて ABPeoplePicker を表示する viewController があります。ただし、連絡先を選択するかどうかに関係なく、ピッカーを提示するだけで漏れているようです。

ピッカーを表示するコードは次のとおりです。

- (void)showPeoplePickerController
{
    ABPeoplePickerNavigationController *picker = [[ABPeoplePickerNavigationController alloc] init];
    picker.displayedProperties = [NSArray arrayWithObject:[NSNumber numberWithInt:kABPersonEmailProperty]];
    picker.peoplePickerDelegate = self;
    [self presentModalViewController:picker animated:YES];
    [picker 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
{
    ABMultiValueRef emails = ABRecordCopyValue(person, property);

    if(userEmailString)
        [userEmailString release];

    userEmailString = (NSString*)ABMultiValueCopyValueAtIndex(emails, identifier);

    CFRelease(emails);

    [[NSNotificationCenter defaultCenter] postNotificationName:@"recipientEmailDidUpdateNotification"  
                                                        object:self]; 
    return NO;
}

念のため、userEmailString はコントローラーの保持された NSString プロパティです (つまり、self.userEmailString = 何とかすることもできます)。

これらは、Instruments からのスクリーンショットで、リークを報告しています。しかし、私はそれを提示した後に release を呼び出していますが、それはピッカーが解放されていないと考えていることに注意してください。また、代わりに CFRelease() を試してみましたが、それでも同じです。

ここに画像の説明を入力

ここに画像の説明を入力

ここに画像の説明を入力

4

1 に答える 1

1

とにかく、うん..リークはSDKにあります。

于 2012-03-27T00:23:38.407 に答える