Кажется, у меня есть фундаментальный пробел в моем понимании управления памятью. Приведенный ниже код находится в единственном экземпляре, который несколько раз вызывается в моем приложении для анализа данных, загружаемых из Интернета. Для каждой загружаемой статьи я выделяю изменяемую строку, затем выполняю тонны разбора, а затем записываю файл в файловую систему для последующего отображения в UIWebView.
Но каждый раз, когда я вхожу в этот метод, я выделяю новую "articleString". И я никогда не выпускаю эту строку. Я думаю, что это утечка, но если я добавлю выпуск в нижней части этого метода (после того, как файл будет записан), мое приложение будет аварийно завершено при следующем вызове этого метода. Я не понимаю, почему это происходит сбой, так как в следующий раз будет вызван другой NSMutableString.
ОБНОВЛЕНИЕ: я освобождаю articleString в методе dealloc. Но все же кажется, что я должен выпустить в конце этого метода, так как я размещаю каждый раз, когда я вхожу.
ОБНОВЛЕНИЕ: articleString определяется в заголовке следующим образом:
@property (nonatomic, retain) NSMutableString *articleString;
метод parseArticle ниже является заполнителем для ряда методов, которые манипулируют articleString.
self.articleString = [[NSMutableString alloc] initWithData:articleData encoding:NSUTF8StringEncoding];
//Parse the article for display
[self parseArticle];
//Write the article string to a file for later display
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *path = [documentsDirectory stringByAppendingPathComponent:@"article.html"];
NSLog(@"%@", articleString);
[articleString writeToFile:path atomically:YES];