我一直在尝试降低我的应用程序的内存使用量,在分析后发现 NSRegularExpression 非常耗费内存。
我的一个 fistMatchInString 调用(第一个?)分配了 1 MB 的内存,该内存永远不会释放。并且每次调用 firstMatchInString 都会泄漏一个“NSConcreteValue”(不管它是什么)。
您是否经历过同样的行为,您知道如何避免吗?你知道 NSRegularExpression 的好的替代品吗?
在你问之前:我所有的正则表达式模式都很小并且是静态创建的。所有要匹配的字符串也都很小。
最佳答案
是的,正则表达式是昂贵的操作。
根据 NSPredicate 编程指南,据说:“正则表达式匹配尤其是一项昂贵的操作”,并且“因此您应该在正则表达式之前执行简单的测试”。
我让您阅读 predicate programming guide 的性能部分.我不知道谓词是否适用于您的情况,但您甚至可以从性能部分(位于“使用谓词”一章)中提取一些有值(value)的信息
编辑:
看这个link的正则表达式部分,他使用的是静态 NSRegularExpression 而不是每次都分配它。
从这个post ,即使它是关于 python 的,“+”似乎更贪婪,所以可能可以在你的正则表达式中进行一些改进,在表达式本身中,一些最佳实践来实现。
关于ios - NSRegularExpression 内存占用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11485725/