我正在使用Leaks模板运行Instruments应用程序,它告诉我在线路上有泄漏:
NSArray *tempFavs = [tempFavString componentsSeparatedByString:@"|"];
我见过其他一些人有类似的问题,但我没有看到任何解决方案。似乎这个数组应该是自动释放的,我不应该担心它。我分配的所有数组都在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]];
}
}
有没有人见过这个?
答案 0 :(得分:5)
所有泄漏都告诉您,对象或由该行代码分配的对象后来泄露。它没有显示导致实际泄漏的代码行,而是显示创建后来泄漏的分配的代码行。
即。您可能过度保留tempFavs
数组中的一个字符串,并且泄漏将其识别为泄漏分配。
首先,尝试“构建和分析”。如果这不能解决问题,请使用Allocations工具确切地确定泄漏的对象以及保留/释放的对象。
答案 1 :(得分:1)
你说你所分配的所有数组都是在dealloc方法中释放的,但你是否肯定这个dealloc被调用?也许你实际上正在泄漏包含所有这些数组的对象。
答案 2 :(得分:0)
Haven没有看到有关componentsSeparatedByString的任何内容增加了保留计数,但你确定你没有在课程的其他地方保留任何NSArray吗?