ZippyFormat 1.0.1

ZippyFormat 1.0.1

Michael Eisel 维护。



  • michaeleisel

ZippyFormat

[NSString stringWithFormat:] 的更快版本

Coverage: 99% Cocoapods compatible

基准测试

这些基准测试是在 iPhone XS 上进行的。Mac 上的结果非常相似。注意,在某些情况下(位置参数、%S%C、输入格式错误),ZippyFormat 会回退到调用 Apple 的版本。然而,这些情况在典型用法中似乎非常罕见(例如,带有位置参数的本地化字符串通常使用 NSLocalizedString)。更多信息,请参阅 此处

用法

只需在文件顶部添加 #import <ZippyFormat/ZippyFormat.h>,然后在您想使用的地方将 [NSString stringWithFormat:...] 替换为 [ZIPStringFormat stringWithFormat:...]

为什么它会这么快?

  • "NSString"通过 category 名为 "NSMutableString"(或者至少是它的 CoreFoundation 相关版本)创建字符串,而 ZippyFormat 则直接向一个 char * 缓冲区中追加,并在最后才创建一个 "NSString"。
    • 在某个程度上,ZippyFormat 可以使用栈上的 char *,避免了 "NSMutableString" 会做的中间堆空间的分配,因为 "NSMutableString" 总是准备在其初始作用域之外使用。
    • 将格式化的参数追加到 char * 中而不进行验证,因为它已经知道数据是有效的 UTF-8)。相比之下,"NSMutableString" 的方法为其他用例而通用,并且对传入的字节数少的假设更少。这意味着额外的非必要验证。
  • 对于 %@ 参数,"NSString" 仅仅是追加 [object description]。然而,传递给调试语句的对象通常只由一些类(如 "NSNumber"、"NSDictionary"、"NSArray" 等)之一组成。对于这些情况,ZippyFormat 会“内联”追加描述,通过将已知的输出复制到缓冲区,而不会调用 [object description]

所以这很大程度上是因为苹果试图做到优雅和在更高层次上操作。

安装

CocoaPods

ZippyFormat 可以通过 CocoaPods 获取。要安装它,只需将以下行添加到您的 Podfile 中。

pod 'ZippyFormat'

手工方式

ZippyFormat 只包含几个文件,没有嵌套的导入结构,所以只需复制文件即可。

作者

迈克·埃塞尔,[email protected]