【问题标题】:Memory leak when using NSArray componentsSeparatedByString使用 NSArray componentsSeparatedByString 时的内存泄漏
【发布时间】:2011-11-02 05:40:00
【问题描述】:

我正在使用 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]];
    }
}

有人见过吗?

【问题讨论】:

    标签: iphone objective-c ios memory-leaks


    【解决方案1】:

    还没有看到有关 componentsSeparatedByString 增加保留计数的任何信息,但您确定没有在类中的其他位置保留任何 NSArray?

    【讨论】:

      【解决方案2】:

      你说你分配的所有数组都在 dealloc 方法中释放,但你确定这个 dealloc 被调用了吗?也许您实际上正在泄漏包含所有这些数组的对象。

      【讨论】:

      • 我在 dealloc 方法中放了一个 NSLog 以确保它被调用,所以这不是问题。
      【解决方案3】:

      所有泄漏都在告诉您,由该行代码分配的一个或多个对象稍后会泄漏。它不是向您显示导致实际泄漏的代码行,而是显示后来泄漏的分配的代码行。

      即您可能过度保留了 tempFavs 数组中的一个字符串,并且泄漏将其识别为泄漏的分配。

      首先,尝试“构建和分析”。如果这不能解决问题,请使用 Allocations 工具准确确定哪个对象被泄露以及它被保留/释放的位置。

      【讨论】:

      • 我无法使用分析找到问题。我根本没有使用过多的分配,而且我很难找到任何使用它的东西。你能说明我如何能够更有效地使用它吗?感谢您的帮助。
      • 我在 Allocations hah 上找到了您的博文,发现有一个特定的实例我没有发布这些数组。感谢您的帮助。
      猜你喜欢
      • 1970-01-01
      • 2011-10-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-04
      • 1970-01-01
      • 2012-06-16
      • 1970-01-01
      相关资源
      最近更新 更多