0

iPhoneの本からすべての連絡先を取得し、メールだけで自分の名前をフィルタリングするアプリを作成しています。そのために次の関数を使用します(メールアドレスを持つ名前でのフィルタリング)

- (long)personRecord:(ABRecordRef)paramPerson{

    if(paramPerson == nil){

        NSLog(@"The given Person is Null");
    }

    ABMutableMultiValueRef emails = ABRecordCopyValue(paramPerson, kABPersonEmailProperty);
    if(emails == nil){

        return 0;
    }

    NSLog(@"%ld",ABMultiValueGetCount(emails));
    // return (ABMultiValueGetCount(emails));

    return (ABMultiValueGetCount(emails));
}

分析すると、潜在的なリークが発生しています

ここに画像の説明を入力してください

どうすればこのリークを解決できますか....????

4

2 に答える 2

2

オブジェクトを解放していないため、メモリリークが発生します。このコードを試してください。これにより、リークが修正され、適切な場所でオブジェクトが解放されます。これがお役に立てば幸いです。

              CFRelease(emails);
于 2012-12-04T13:12:26.820 に答える
1

からそのオブジェクトのコピーを取得していますABRecordRef。だからあなたはそれを解放する必要があります。

次のようにメソッドを変更します。

- (long)personRecord:(ABRecordRef)paramPerson
  {

    if(paramPerson == nil)
    {

        NSLog(@"The given Person is Null");
    }

    ABMutableMultiValueRef emails = ABRecordCopyValue(paramPerson, kABPersonEmailProperty);
    if(emails == nil)
    {

        return 0;
    }

    NSLog(@"%ld",ABMultiValueGetCount(emails));
    // return (ABMultiValueGetCount(emails));

    long count = ABMultiValueGetCount(emails);
     CFRelease(emails);
     return count;
}
于 2012-12-04T13:16:27.800 に答える