首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用MWFeedParser的多个提要,代码帮助

使用MWFeedParser的多个提要,代码帮助
EN

Stack Overflow用户
提问于 2011-09-08 15:03:14
回答 1查看 869关注 0票数 1

我目前有这段代码,但它泄漏了,因为我不知道如何释放提要解析器对象这么多次,所以我需要内存管理方面的帮助,或者以其他方式向多个提要提供它。

代码:

代码语言:javascript
复制
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];        
    }

取消分配:

代码语言:javascript
复制
- (void)dealloc {
    [formatter release];
    [parsedItems release];
    [itemsToDisplay release];
    [feedParser release];
    [super dealloc];
}

来自MWFeedParser代码的initWithFeedUrl是:

代码语言:javascript
复制
- (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;
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-09-08 16:21:20

最好的方法是将它们添加到一个数组中,然后在dealloc中释放该数组。

代码语言:javascript
复制
// 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];
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7344324

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档