NSStrings создал без выделения, утечек памяти

Мое приложение пронизано утечками памяти относительно объектов NSString. Никогда не делайте я использую выделение для создания объекта NSString, все же согласно Инструментам (используемый с физическим устройством), приложение пропускает объекты NSString. Это происходит вокруг использования stringByAppendingString. Пример кода:

NSString *documentsPathPlusSlash = [self.documentsPath stringByAppendingString:@"/"];
NSString *documentsPathPlusSlashAndFileName = [documentsPathPlusSlash stringByAppendingString:fileName];
mainMenuViewController.documentsPath = documentsPathPlusSlashAndFileName;

После того как это было одним длинным оператором, таким образом, я думал, возможно, разделяя его на отдельные строки, решит его. Никакая такая удача, код выше пропускает объекты NSString. Почему это? MainMenuViewController.dealloc не выпускает documentsPath, потому что это не необходимо. Или это? Документация Apple и различные форумы действительно не помогают.

1
задан Sander de Jong 25 May 2010 в 13:41
поделиться

2 ответа

Почему? MainMenuViewController.dealloc не выпускает documentsPath, поскольку в этом нет необходимости. Или это так?

Это зависит от того, как определено свойство documentsPath в вашем mainMenuViewController. Если он определен с атрибутом retain или copy (что, вероятно, так и будет), то ваш контроллер «берет на себя право собственности» на строковый объект, увеличивает его значение удержания, и он несет ответственность за его освобождение в методе dealloc - так что в этом случае вам понадобится освобождение.

2
ответ дан 3 September 2019 в 00:19
поделиться

Зависит от того, как объявлен и реализован файл documentsPath. В простейшем случае, когда documentsPath является @property (сохранить) с @synthesized сеттером, вам все равно нужно установить его в nil в вашем dealloc:

mainMenuViewController.documentsPath = nil
0
ответ дан 3 September 2019 в 00:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: