尝试替换 NSString 中的多个字符串实例时内存使用过多
Too much memory usage when trying to replace many instances of a string in an NSString
我必须在循环中从另一个字符串中删除字符串。这个
我遇到了巨大的内存泄漏
[_withString1a setString:[_withString1a stringByReplacingOccurrencesOfString:fix1 withString:@""]];
[_withString1a setString:[_withString1a stringByReplacingOccurrencesOfString:fix2 withString:@""]];
我也试过了
[_withString1a setString:[[NSRegularExpression regularExpressionWithPattern:fix1 options:NSRegularExpressionCaseInsensitive error:nil] stringByReplacingMatchesInString:_withString1a options:0 range:NSMakeRange(0, [_withString1a length]) withTemplate:@""]];
[_withString1a setString:[[NSRegularExpression regularExpressionWithPattern:fix2 options:NSRegularExpressionCaseInsensitive error:nil] stringByReplacingMatchesInString:_withString1a options:0 range:NSMakeRange(0, [_withString1a length]) withTemplate:@""]];
我在一个循环中有这个,正弦在每次迭代中变量修复是不同的并且 stringByReplacingOccurrencesOfString
导致内存泄漏 +0.5mb/迭代。 _withString1a
是 0.5mb 文件。 1k 循环后应用程序崩溃。
有什么想法吗?
您可能没有遇到内存泄漏,只是在循环中累积了自动释放的字符串。在替换操作周围添加一个自动释放池:
for (...) {
@autoreleasepool {
_withString1a = [_withString1a stringByReplacingOccurrencesOfString:fix1 withString:@""]];
}
}
使用 autoreleasepool
每次迭代都会删除临时自动释放的内存。
您可以在自动释放池中放置多个语句。
你完全错了。
您不必在循环中从另一个字符串中删除字符串。你认为你必须这样做,因为你想不出更聪明的东西,但你不必这样做。即使您设法避免了自动释放内存的浪费,您的操作仍然非常缓慢。
创建一个 NSMutableString。然后找到要删除的第一个项目的位置,并将字符串开头的字符附加到第一个项目。然后找到要删除的第二个项目的位置,在第一个项目结束后开始搜索,并将中间的字符附加到可变字符串。等等。
我必须在循环中从另一个字符串中删除字符串。这个
我遇到了巨大的内存泄漏[_withString1a setString:[_withString1a stringByReplacingOccurrencesOfString:fix1 withString:@""]];
[_withString1a setString:[_withString1a stringByReplacingOccurrencesOfString:fix2 withString:@""]];
我也试过了
[_withString1a setString:[[NSRegularExpression regularExpressionWithPattern:fix1 options:NSRegularExpressionCaseInsensitive error:nil] stringByReplacingMatchesInString:_withString1a options:0 range:NSMakeRange(0, [_withString1a length]) withTemplate:@""]];
[_withString1a setString:[[NSRegularExpression regularExpressionWithPattern:fix2 options:NSRegularExpressionCaseInsensitive error:nil] stringByReplacingMatchesInString:_withString1a options:0 range:NSMakeRange(0, [_withString1a length]) withTemplate:@""]];
我在一个循环中有这个,正弦在每次迭代中变量修复是不同的并且 stringByReplacingOccurrencesOfString
导致内存泄漏 +0.5mb/迭代。 _withString1a
是 0.5mb 文件。 1k 循环后应用程序崩溃。
有什么想法吗?
您可能没有遇到内存泄漏,只是在循环中累积了自动释放的字符串。在替换操作周围添加一个自动释放池:
for (...) {
@autoreleasepool {
_withString1a = [_withString1a stringByReplacingOccurrencesOfString:fix1 withString:@""]];
}
}
使用 autoreleasepool
每次迭代都会删除临时自动释放的内存。
您可以在自动释放池中放置多个语句。
你完全错了。
您不必在循环中从另一个字符串中删除字符串。你认为你必须这样做,因为你想不出更聪明的东西,但你不必这样做。即使您设法避免了自动释放内存的浪费,您的操作仍然非常缓慢。
创建一个 NSMutableString。然后找到要删除的第一个项目的位置,并将字符串开头的字符附加到第一个项目。然后找到要删除的第二个项目的位置,在第一个项目结束后开始搜索,并将中间的字符附加到可变字符串。等等。