Должен ли я выпустить это? Управление памятью в Objective-C - PullRequest
0 голосов
/ 03 сентября 2010

Должен ли я выпустить strPhone?Как насчет объекта coreFoundation, приведенного к NSString?Что с ним происходит?

strPhone = [[NSString alloc] initWithUTF8String: [[(NSArray *)ABMultiValueCopyArrayOfAllValues(theProperty) objectAtIndex:identifier] UTF8String]];

Спасибо, что помогли мне понять.

Ответы [ 3 ]

3 голосов
/ 03 сентября 2010

Вы должны отпустить или автоматически выпустить оба.Для NSString каждый раз, когда вы используете alloc + init для создания объекта, вы устанавливаете его счетчик ссылок на 1. Вы несете ответственность за его освобождение по завершении или за автоматическое освобождение его сейчас, чтобы разрешить его освобождение в конце цикла выполнения.

Для CFObject ABMultiValueCopyArrayOfAllValues ​​возвращает CFArray, который является «свободным мостом» для NSArray (то есть он может использоваться взаимозаменяемо с NSArray).Каждый раз, когда выполняется копирование - как следует из названия метода, вы несете ответственность за освобождение возвращенного объекта.Опять же, вы можете освободить его сразу же после того, как с ним покончено, или сделать это автоматически, чтобы освободить его после завершения цикла выполнения.

2 голосов
/ 03 сентября 2010

Да, оба. См. Руководство по управлению памятью Apple для полного, но довольно краткого изложения управления памятью в Какао.

1 голос
/ 03 сентября 2010

Не забывайте NARC об управлении вашей памятью.

Новый, Выделить, Сохранить, Копировать. Это методы, которые создают объекты, которые ВЫ несете ответственность за освобождение. Помимо этих четырех методов, любой новый объект, который вы получаете, автоматически освобождается, и вам не нужно явно обрабатывать его освобождение.

...