Проблема управления памятью с NSString - PullRequest
0 голосов
/ 28 ноября 2010

У меня есть NSMutableArray * cityData, который я заполняю пользовательскими объектами LocationDetail.cityData создается в viewDidLoad и выпускается в dealloc.Где-то в коде, основанном на действиях пользователя, я заполняю LocationDetail и добавляю его в массив cityData:

LocationDetail* d = [[LocationDetail alloc] init];
    d.city = [NSString stringWithFormat:@"%S", (char*)sqlite3_column_text16(statement, 1)];
    d.tz = [NSString stringWithFormat:@"%S", (char*)sqlite3_column_text16(statement, 3)];
    d.country = [NSString stringWithFormat:@"%S", (char*)sqlite3_column_text16(statement, 2)];
    d._id = [NSString stringWithFormat:@"%S", (char*)sqlite3_column_text16(statement, 0)];

    [cityData addObject:d];
    [d release];

Когда я закончу с контроллером представления и удаляю его, утилита Leaks сообщает, что у меня есть утечкакод выше в NSCFString во всех 4 строках с [NSString stringWithFormat] выше.

Я попытался удалить материал sqlite3 и упростил вызов до чего-то вроде

d._id = [NSString stringWithFormat:@"%s", "a string"]

с тем же результатом.Однако, если я заменю строку NSStringWithFormat следующим образом:

d._id = @"a string";

, утечка исчезнет.Интересно, почему возникает утечка, если я использую stringWithFormat, но не если я использую @ "что-то".Есть ли что-то очевидное, что я делаю не так?

Спасибо!

1 Ответ

1 голос
/ 29 ноября 2010

Свойства не освобождаются автоматически для вас, вам нужно сделать это самостоятельно на

- (void)dealloc

См. Язык программирования Objective-C: Объявленные свойства для примера.


Редактировать:

Похоже, что пример перенесен в Расширенное руководство по программированию управления памятью .

...