2011-09-08 5 views
1

私は現在このコードを持っていますが、これは何度もフィードパーサーオブジェクトを解放する方法がわからないのでリークします。そのため、メモリ管理や複数のフィードそれと。MWFeedParserの複数のフィード、コードの助け

コード:その後、配列に追加することです

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

最良の方法、および:

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:MWFeedParserコードから

- (void)dealloc { 
    [formatter release]; 
    [parsedItems release]; 
    [itemsToDisplay release]; 
    [feedParser release]; 
    [super dealloc]; 
} 

とinitWithFeedUrlです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]; 
} 
+0

このようにしますか? http://pastebin.com/YuH7b9hB – vburojevic

+0

そうですね、ちょうどそのように:) 'dealloc'から' [feedParser release]; '行を削除することを忘れないでください。そうしないとクラッシュします。 –

+0

いいえ、漏れはありません! :) もう1つの問題は、テーブルが空(フィードなし)で、私がリフレッシュをクリックすると、アプリがクラッシュする、これを解決する方法ですか? [feedParserリリース]のためですか?それは存在しないので、私は思いますか? – vburojevic

関連する問題