NSStrings созданные без alloc, утечки памяти - PullRequest
1 голос
/ 25 мая 2010

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

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

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

Ответы [ 2 ]

2 голосов
/ 25 мая 2010

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

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

0 голосов
/ 25 мая 2010

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

mainMenuViewController.documentsPath = nil
...