gpt4 book ai didi

iphone - 初始化 NSMutableString 对象的最佳方法是什么?

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

如果我回答以下问题。初始化 NSMutableString 类的最佳方法是什么?(所有实例都会在意想不到的时候返回...所以我假设初始化如下:)

  1. 如果我提前知道工作量。 (预期)

    NSMutableString *str1 = [NSMutableString stringWithString:@""];
    NSMutableString *str2 = [NSMutableString stringWithCapacity:0];
    NSMutableString *str3 = [NSMutableString stringWithCapacity:1000];
    NSMutableString *str4 = [NSMutableString string];

    for(int i = 0; i< 1000; i++)
    {
    //The following tasks.(Adding to the string to continue working.)
    [/*str1~str4*/ appendFormat:@"%d", i];
    }
  2. 如果我事先不知道工作量。 (出乎意料)

    NSMutableString *str1 = [NSMutableString stringWithString:@""];
    NSMutableString *str2 = [NSMutableString stringWithCapacity:0];
    NSMutableString *str3 = [NSMutableString stringWithCapacity:1000];
    NSMutableString *str4 = [NSMutableString string];

    for(int i = 0; i< /*a large of size(unpredictable)*/ ; i++)
    {
    //The following tasks.(Adding to the string to continue working.)
    [/*str1~str4*/ appendFormat:@"%d", i];
    }

在执行这些任务时大体分为两部分,什么是最好的初始化方式?

我有时在处理这些任务时也很困惑。

最佳答案

案例一

在列出的选项中,我会使用:

NSMutableString *str3 = [NSMutableString stringWithCapacity:1000];

…如果您知道目标大小,或者在顶部留有一点空间来估计它,并且能够快速确定确切的大小,或者最坏情况下的大小,这可以节省多次重新分配和复制操作。如果您不知道最坏情况下的大小,或者计算需要花费大量时间,那么您不妨使用 [NSMutableString string][NSMutableString new] 。此外,*WithCapacity 是一个提示,框架可以随意忽略它。

当然,你的循环体和你保留的大小也意味着所有的值都是 [0…9](具体来说,所有的值都占用一个字符),在这种情况下你可以做得更好使用带有更多参数的格式字符串。但是,对于大多数迭代,i 显然大于 9,并且每次平均会消耗 3 个字符,因此对于您发布的确切代码,3000 将是更合适的预留容量。

案例二

在列出的选项中,我会使用:

NSMutableString *str4 = [NSMutableString string];

更好的是,如果您不需要将它添加到自动释放池:[NSMutableString new][[NSMutableString alloc] init]

其他注意事项

是的,让对象远离自动释放池(例如使用 alloc+init)可以提高性能并显着减少峰值内存使用量。有时,这超出了您的控制范围,并且在某些环境(例如 ARC)中,即使您使用自动释放的便利构造函数,这也可能发生 - 例如[NSMutableString 字符串]

更快的解决方案

最后,如果您概述的这种情况确实是一个性能问题,最快的方法是在堆栈上创建一个 char 缓冲区,然后从中创建一个 NSString将数字复制到 char 缓冲区的结果。假设您的 int 都是 0-9,这将非常快速和简单,然后只需从(终止的)cstring 创建一个 NSString。如果输入大小不同或非常大(导致字符串很长),您甚至可以这样做。

关于iphone - 初始化 NSMutableString 对象的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8636983/

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