使用MWFeedParser的多个Feed,帮助代码

时间:2011-09-08 07:03:14

标签: iphone xcode rss feeds

我目前有这个代码,但它泄漏了,因为我不知道如何多次发布feed解析器对象,所以我需要内存管理方面的帮助或其他一些方法来提供多个feed。

代码:

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];        
    }

的dealloc:

- (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;
}

1 个答案:

答案 0 :(得分:1)

最好的方法是将它们添加到数组中,然后在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];
}