Мое приложение пронизано утечками памяти относительно объектов NSString. Никогда не делайте я использую выделение для создания объекта NSString, все же согласно Инструментам (используемый с физическим устройством), приложение пропускает объекты NSString. Это происходит вокруг использования stringByAppendingString. Пример кода:
NSString *documentsPathPlusSlash = [self.documentsPath stringByAppendingString:@"/"];
NSString *documentsPathPlusSlashAndFileName = [documentsPathPlusSlash stringByAppendingString:fileName];
mainMenuViewController.documentsPath = documentsPathPlusSlashAndFileName;
После того как это было одним длинным оператором, таким образом, я думал, возможно, разделяя его на отдельные строки, решит его. Никакая такая удача, код выше пропускает объекты NSString. Почему это? MainMenuViewController.dealloc не выпускает documentsPath, потому что это не необходимо. Или это? Документация Apple и различные форумы действительно не помогают.
Почему? MainMenuViewController.dealloc не выпускает documentsPath, поскольку в этом нет необходимости. Или это так?
Это зависит от того, как определено свойство documentsPath
в вашем mainMenuViewController
. Если он определен с атрибутом retain
или copy
(что, вероятно, так и будет), то ваш контроллер «берет на себя право собственности» на строковый объект, увеличивает его значение удержания, и он несет ответственность за его освобождение в методе dealloc
- так что в этом случае вам понадобится освобождение.
Зависит от того, как объявлен и реализован файл documentsPath. В простейшем случае, когда documentsPath является @property (сохранить) с @synthesized сеттером, вам все равно нужно установить его в nil в вашем dealloc:
mainMenuViewController.documentsPath = nil