自动释放NSDictionary的内存泄漏

时间:2013-09-06 19:54:10

标签: ios objective-c memory-leaks

我已经分析了我的代码,并且分析器显示我的一个方法是在自动释放的对象上泄漏内存。以下是相关代码的片段:

-(void) fillRSSEntriesDictionaryObject: (NSMutableDictionary *) dictionaryObject  withAllRSSEntries: (NSArray *) allRSSEntries forKey: (NSString *) keyForRSSEntriesArchive {
    RSSEntry *anRSSEntry;
    NSArray *source;
    NSMutableArray *episodes;   
    NSMutableArray *sourceArray = [[[NSMutableArray alloc] initWithObjects:nil] autorelease];
    for (int i=0; i<[allRSSEntries count]; i++) {
        source = [allRSSEntries objectAtIndex:i];   // grab the next source array.
        episodes = [[[NSMutableArray alloc] initWithObjects:nil] autorelease];  // initialize the episodes array
        for (int j=0; j<[source count]; j++) {
            anRSSEntry = [source objectAtIndex:j];
            NSDictionary *episodeDictionary = [NSDictionary dictionaryWithObjectsAndKeys:anRSSEntry.blogTitle, @"Blog Title", 
                                               anRSSEntry.articleTitle, @"Article Title", nil];
            [episodes addObject:episodeDictionary]; // save the info for this episode
        }

        [sourceArray addObject:episodes];
    }

    // Finally, we need to create the key-value pair for the source array
    [dictionaryObject setObject:sourceArray forKey: keyForRSSEntriesArchive];
}

如您所见,sourceArray和episodes是唯一的alloc'd内存,并且都是自动释放的。 episodes数组被添加到sourceArray数组中。 sourceArray成为传递给调用者的对象。

分析器提供的具体信息是负责的库是“基础”,负责的调用者是+ [NSDictionary(NSDictionary)newWithContentsOf:immutable]。当我扩展它时,它最终指向我的应用程序作为负责的库和此方法作为负责的调用者。

由于这些是自动释放的数组,为什么探查器会抱怨泄漏的内存?

1 个答案:

答案 0 :(得分:1)

这里没有泄漏。很可能一些其他代码稍后使用这些对象并泄漏它们。

您可以使用Instruments查看泄漏对象的保留/释放历史记录,这可以帮助您找到额外的保留或缺失版本。