我一直试图降低我的应用程序的内存使用量,并且在分析后发现NSRegularExpression非常耗费内存。
我的一个fistMatchInString调用(第一个?)分配1 MB的内存,它永远不会被释放。每次调用firstMatchInString都会泄漏一个“NSConcreteValue”(无论是什么)。
您是否经历过相同的行为,并且您知道如何解决这个问题吗?你知道NSRegularExpression的好替代品吗?
在你提问之前:我所有的正则表达式模式都很小并且是静态创建的。所有匹配的字符串也很小。
答案 0 :(得分:1)
是的,正则表达式是昂贵的操作。
从NSPredicate编程指南中可以看出:“正则表达式匹配尤其是一项昂贵的操作”,并且“因此,您应该在正则表达式之前执行简单的测试”。
我让你阅读predicate programming guide的效果部分。我不知道谓词是否适用于你的案例,但你甚至可以从性能部分(位于“使用谓词”一章)中提取一些有价值的信息。
编辑:
查看此link的正则表达式部分,他使用静态NSRegularExpression而不是每次都分配它。
来自这个post,即使它是关于python的,“+”似乎更贪婪,所以在你的正则表达式中可能会有一些改进,在表达式本身,一些最佳实践实施