【发布时间】:2010-02-13 23:06:25
【问题描述】:
我似乎对内存管理的理解存在根本性的差距。下面的代码位于一个单例中,该单例在我的应用程序中被多次调用以解析从网络下载的数据。对于我下载的每篇文章,我分配一个可变字符串,然后进行大量解析,然后将文件写入文件系统,以便稍后在 UIWebView 中显示。
但是每次进入这个方法,我都会分配一个新的“articleString”。而且我从不释放这个字符串。我认为这是一个泄漏,但是如果我在这个方法的底部添加一个发布(在文件写入之后),我的应用程序在下次调用这个方法时会崩溃。我不明白它为什么会崩溃,因为下次调用它时会分配另一个 NSMutableString 。
更新:我确实在 dealloc 方法中发布了 articleString。但是似乎还是应该在这个方法结束的时候释放,因为每次进入都是alloc。
UPDATE:articleString在header中定义如下:
@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];
【问题讨论】:
-
你对
@property articleString的定义是什么?您还需要发布parseArticle的内容,其中可能包含一些保留/释放错误。 -
见上面编辑过的问题。谢谢。
标签: iphone cocoa memory-management memory-leaks