我目前有这段代码,但它泄漏了,因为我不知道如何释放提要解析器对象这么多次,所以我需要内存管理方面的帮助,或者以其他方式向多个提要提供它。
代码:
for (NSString *imePredmeta in [Data variables].mojiPredmeti) {
NSString *link = [[Data variables].rss objectForKey: imePredmeta];
NSURL *feedURL = [NSURL URLWithString: link];
feedParser = [[MWFeedParser alloc] initWithFeedURL:feedURL];
feedParser.delegate = self;
feedParser.feedParseType = ParseTypeFull; // Parse feed info and all items
feedParser.connectionType = ConnectionTypeAsynchronously;
[feedParser parse];
}取消分配:
- (void)dealloc {
[formatter release];
[parsedItems release];
[itemsToDisplay release];
[feedParser release];
[super dealloc];
}来自MWFeedParser代码的initWithFeedUrl是:
- (id)initWithFeedURL:(NSURL *)feedURL {
if ((self = [self init])) {
// Check if an string was passed as old init asked for NSString not NSURL
if ([feedURL isKindOfClass:[NSString class]]) {
feedURL = [NSURL URLWithString:(NSString *)feedURL];
}
// Remember url
self.url = feedURL;
}
return self;
}发布于 2011-09-08 16:21:20
最好的方法是将它们添加到一个数组中,然后在dealloc中释放该数组。
// declare an iVar in your header file
NSMutableArray *feeds;
// instantiate the array, but release it first as you may call your method more
// than once
if (feeds) {
[feeds release];
}
feeds = [[NSMutableArray alloc] init];
for (NSString *imePredmeta in [Data variables].mojiPredmeti) {
...
// after calling parse on the feed, add it to the array and then release it.
// Objects added to an array are retained by the array so this is safe
[feedParser parse];
[feeds addObject:feedParser]; // <-- Add parser to array
[feedParser release]; // <-- Release parser
}
// then in your dealloc simply release the array, which will in-turn release all
// the parser objects it contains
- (void)dealloc {
[formatter release];
[parsedItems release];
[itemsToDisplay release];
[feeds release]; // <-- Release feeds array
// I've removed the call to release feedParser as it's already been released
[super dealloc];
}https://stackoverflow.com/questions/7344324
复制相似问题