当C++遇到IOS应用开发---字符串处理
在Object-c中,字符串处理通常使用NSString,NSMutableString这两个类,前者用于定长字符串,后者用于可变长度字符串的操作。尽量其提供的方法很丰富,但一用起来后就让人感到很难受,比如其超长的方法名称(如stringByReplacingPercentEscapesUsingEncoding),再加上嵌套“[]”式的调用方式,让人很快就会产生"[]"匹配综合症。
即使xcode提供了自动配对“[]”号的功能,但一阅读起源代码后依旧让人心生厌恶。给人一种“强迫打字综合症”的感觉。所以我在NSMutableString基础上用C++进行了封装,特别是对于一些常用方法的使用,在使用时会非常方便,与C#没太大差别。
首先看一下String类的源码(说明:因为C++中有std::string这个类,为了与其区别,这里使用了首字母大写)。
从源码中可以看出,为了支持正则式,这里使用了RegexKitLite库,网上有不少网友问为什么使用这个H文件时,如果.m文件改成支持C++的.mm后缀之后,会造编译错误('captureCount' was not declared in this scope),导致程序运行不起来。而网友的解决方法就是不使用.MM后缀文件。但经过分析我发现是BLOCK块语法导致编译错误的,在经过不断尝试之后,发现只要修改该头文件中的如下宏定义,就可以将该头文件包含在MM文件中了:
BOOL search = s.contains(@"dadddd");
作者: daizhj, 代震军
微博: http://weibo.com/daizhj
Tags:ios, c++, string