NSString потенциальная утечка - PullRequest
3 голосов
/ 14 апреля 2010

Когда я строю и анализирую свой проект на XCode, я получаю «предупреждение» в следующей строке:

NSString *contactEmail = (NSString *)ABMultiValueCopyValueAtIndex(emailInfo, 0);

Сообщение: потенциальная утечка на объекте, размещенном в линии ... и сохраненном в contactEmail.

Есть ли ошибки в этой строке?

UPDATE

Я получаю то же «предупреждение» с этой строкой кода:

ABMultiValueRef emailInfo = ABRecordCopyValue(person, kABPersonEmailProperty);

Но здесь я не могу этого сделать:

[emailInfo release];

Я разрабатываю для iPhone.

Ответы [ 2 ]

7 голосов
/ 14 апреля 2010

ABMultiValueCopyValueAtIndex - это функция «Копировать», которая следует за «Правилом создания» . Вам нужно позвонить CFRelease, чтобы освободить его после окончания использования.

NSString *contactEmail = (NSString *)ABMultiValueCopyValueAtIndex(emailInfo, 0);
...
if (contactEmail != nil)
  CFRelease((CFTypeRef) contactEmail);
1 голос
/ 14 апреля 2010
  1. Состав актеров несколько бессмысленный.
  2. Линия может протечь, если вы не отпустите или не освободите ее где-нибудь.

Редактировать: Для краткости:

NSString *contactEmail = [(NSString *)ABMultiValueCopyValueAtIndex(emailInfo, 0) autorelease];

(приведение может все еще быть бессмысленным, я не уверен относительно того, как компилятор будет обрабатывать попытки отправки сообщения непосредственно в CFTypeRef.)

...