具有单身人士属性的iPhone内存管理

时间:2010-02-13 23:06:26

标签: iphone cocoa memory-management memory-leaks

我的记忆管理理解似乎有一个根本性的差距。下面的代码位于我的应用程序中多次调用的单例内,用于解析从Web下载的数据。对于我下载的每篇文章,我分配一个可变字符串,然后进行大量的解析,然后将文件写入文件系统,以便稍后在UIWebView中显示。

但每次我输入此方法时,我都会分配一个新的“articleString”。我永远不会释放这个字符串。我认为这是一个泄漏,但如果我在此方法的底部添加一个版本(在写入文件之后),我的应用程序将在下次调用此方法时崩溃。我不明白为什么它会崩溃,因为下次调用时会分配另一个NSMutableString。

更新:我确实在dealloc方法中发布了articleString。但似乎我应该在这个方法结束时释放,因为我每次进入都会分配。

更新: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];

1 个答案:

答案 0 :(得分:1)

我想让属性为我处理这个问题。如果articleString属性设置为retain,那么这很简单。

self.articleString = [[[NSMutableString alloc] initWithData:articleData encoding:NSUTF8StringEncoding] autorelease];

[self doStuff];

然后

- (void)dealloc {
    self.articleString = nil;
    [super dealloc]
}

文章字符串将在您设置新文章时被释放并正确保留。它将在dealloc上清理。