【发布时间】:2015-01-18 16:32:17
【问题描述】:
对于将字符串数组转换为单个逗号分隔字符串的任务,我想知道下面的 NSString 方法或 NSMutableString 方法是否有显着优势。 (在这两种情况下,allNames 都是NSStrings 的NSArray。)
NSString 方法
NSString *listOfNames=[allNames objectAtIndex:0];
for (int i=1;i<[allNames count];i++){
NSString *thisName=[allNames objectAtIndex:i];
listOfNames=[listOfNames stringByAppendingFormat:@", %@",thisName];
}
NSMutableString 方法
NSMutableString *mutableListOfNames=[[NSMutableString alloc] init];
[mutableListOfNames appendString:allNames[0]];
for (int i=1;i<[allNames count];i++){
NSString *thisName=[allNames objectAtIndex:i];
[mutableListOfNames appendFormat:@", %@",thisName];
}
NSString *listOfNames=[NSString stringWithString:mutableListOfNames];
【问题讨论】:
-
不同之处在于
NSString方法在短时间内创建和释放大量对象。而NSMutableString避免了这种情况。由于您的程序由 ARC 管理,因此从长远来看,这可能不会产生巨大的影响。 -
您的字符串结果如下所示是否可以:
@", foo, bar"? -
你的所有代码都可以用一行替换:`NSString *listOfNames = [allNames componentsJoinedByString:@", "];
-
@ThomasW:我以为我可以通过在循环之前选择第一个列表项来避免这种情况?运行时似乎按预期工作。
-
@Rogare 使用上面的
NSMutableString方法,除非 allNames 中的第一个 NSString 是NSMutableString,否则代码将失败。这也会丢弃最初分配的NSMutableString。
标签: ios objective-c nsstring nsmutablestring