分析在循环的每次迭代中显示泄漏

时间:2014-02-21 19:58:32

标签: ios objective-c cocoa-touch memory-management memory-leaks

分析告诉每次迭代都有MSVenue个对象泄漏,并且数组对象泄漏。

enter image description here

fetchedRecords是从executeFetchRequest:方法返回的数组,我确定会返回一个自动释放的数组。

-(NSArray *)getSavedVenues
{
    NSMutableArray *venues = [[@[] mutableCopy] autorelease];
        for (Venues *venueManagedObject in fetchedRecords)
        {
            MSVenue *tmp = [[MSVenue alloc] init];
            [tmp setID:venueManagedObject.venueID];
            [tmp setName:venueManagedObject.venueName];

            [venues addObject:tmp];
            [tmp release];
            tmp = nil;
        }

        return [NSArray arrayWithArray:venues];
}

1 个答案:

答案 0 :(得分:-2)

尝试更改:

[tmp setName:venueManagedObject.venueName];

[tmp setName:[NSString stringWithString:venueManagedObject.venueName]];

根据您在MSVenue中声明Name属性的方式,您可能正在创建对另一个对象venueName的强引用,从而阻止该对象被释放。这是一个循环引用 - fetchedRecords将不会自动释放,直到引用它的所有对象都被释放,并且在fetchedRecords被释放之前它们不会被释放。

与venueId相同,除非它是标量类型(例如NSInteger)。