使用NSArray componentsSeparatedByString时内存泄漏

Mil*_*ec8 1 iphone memory-leaks objective-c ios

我正在使用Leaks模板运行Instruments应用程序,它告诉我在线路上有泄漏:

NSArray *tempFavs = [tempFavString componentsSeparatedByString:@"|"];
Run Code Online (Sandbox Code Playgroud)

我见过其他一些人有类似的问题,但我没有看到任何解决方案.似乎这个数组应该是自动释放的,我不应该担心它.我分配的所有数组都在dealloc方法中释放.这是所有相关代码:

NSArray *tempFavoritesArray = [appPreferences arrayForKey:[NSString stringWithFormat:@"%@ %@ favorites", server, project]];
favoritesArrayDisplay = [[NSMutableArray alloc] initWithObjects:nil];
cenXsArray = [[NSMutableArray alloc] initWithObjects:nil];
cenYsArray = [[NSMutableArray alloc] initWithObjects:nil];
viewScalesArray = [[NSMutableArray alloc] initWithObjects:nil];
currentPresetsArray = [[NSMutableArray alloc] initWithObjects:nil];
rastersArray = [[NSMutableArray alloc] initWithObjects:nil];
empty = NO;
selected = NO;

if ([tempFavoritesArray count] == 0 || tempFavoritesArray == nil)
{
    [favoritesArrayDisplay addObject:@"No favorites saved."];
    empty = YES;
}

for (int i=0; i<[tempFavoritesArray count]; i++)
{
    NSString *tempFavString = [NSString stringWithString:[tempFavoritesArray objectAtIndex:i]];
    NSArray *tempFavs = [tempFavString componentsSeparatedByString:@"|"];        

    if ([tempFavs count] > 2)
    {
        [favoritesArrayDisplay addObject:[tempFavs objectAtIndex:0]];
        [cenXsArray addObject:[tempFavs objectAtIndex:1]];
        [cenYsArray addObject:[tempFavs objectAtIndex:2]];
        [viewScalesArray addObject:[tempFavs objectAtIndex:3]];
        [currentPresetsArray addObject:[tempFavs objectAtIndex:4]];
        [rastersArray addObject:[tempFavs objectAtIndex:5]];
    }
}
Run Code Online (Sandbox Code Playgroud)

谁看过这个吗?

bbu*_*bum 5

所有泄漏都告诉您,该行代码分配的一个或多个对象稍后会泄露.它没有显示导致实际泄漏的代码行,而是显示创建后来泄漏的分配的代码行.

也就是说,你可能过度保留了tempFavs数组中的一个字符串,并且泄漏将其识别为泄漏分配.

首先,尝试"构建和分析".如果这不能解决问题,请使用Allocations工具确切地确定泄漏的对象以及保留/释放的对象.