gpt4 book ai didi

objective-c - 是NSMutableString的-appendString : method an efficient way to build up a large string?

转载 作者:太空狗 更新时间:2023-10-30 03:50:19 25 4
gpt4 key购买 nike

我计划通过遍历集合并一次生成 block 来构建一个可能很大的字符串。如果我只是简单地从一个 NSMutableString 开始并重复向它附加 block ,那么它是否有效地工作或者它是一个 Schlemiel the Painter情况?在我看来,NSMutableString 的实现方式似乎可以避免这种情况,但我在官方文档中找不到任何对此的讨论,我想确定一下。

(现在我正在写这篇文章,我意识到在这种情况下我可以构建一个 NSArray 字符串并使用 -componentsJoinedByString: 一样容易,但无论如何知道这将是一件好事。)

最佳答案

Schlemiel 情况本身不会发生,因为所有内部 NS/CFString 表示都使用显式长度,就像所有理智的字符串实现一样。 (来自 OS X 10.6.2 的基本 CoreFoundation 类型源的稍微修改版本可用 here。)真正的问题是分配开销。

在发布的代码中,可变字符串的缓冲区一次增长 50%,除非它们非常大(至少 ULONG_MAX/3UL),在重新分配时给出 O(log n) 界限对于实际场景。使用 NSArray 方法应该会导致单个分配。另一方面,如果您分段构建字符串并在构建过程中释放这些片段,您可能会减少缓存/VM 抖动。

因此,基本上,优化的黄金法则适用:如果基准测试显示出问题(在大型但现实的数据集上),请尝试两者。

关于objective-c - 是NSMutableString的-appendString : method an efficient way to build up a large string?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3730147/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com