我正在编写一些执行字符串操作的代码。在这种特殊情况下,将“?partnerId = 30”附加到iTunes Affiliate链接的URL。这是一个原始字符串,完全是静态的。我在想,做得更好:
urlString = [urlString stringByAppendingFormat:@"%@", @"?partnerId=30"];
或者:
urlString = [urlString stringByAppendingFormat:@"%s", "?partnerId=30"];
我认为最好不要实例化整个Objective-C对象,但我从未见过这样做过。
答案 0 :(得分:4)
使用@“”语法声明的字符串是常量,并且在代码运行时已存在于内存中,因此使用它们不会产生分配损失。
您可能会发现它们的速度非常快,因为它们知道自己的长度,而C字符串需要循环才能找出它们的长度。
通过不使用格式字符串,您可以获得更明显的性能提升(但仍然很小):
urlString = [urlString stringByAppendingString:@"?partnerId=30"];
答案 1 :(得分:3)
文字C字符串和文字NSStrings都表示为常量的内存位。两者都不需要分配使用。
答案 2 :(得分:1)
Objective-C字符串文字是不朽的对象。当二进制文件加载到内存中时,它们会被实例化。有了这些知识,前一个表单不创建一个临时的NSString
。
老实说,知道 更快,因为它还取决于外部条件; NSString
可以表示多个编码的字符串(默认值为UTF-16),如果urlString
有要执行的编码转换,那么它可能是 的性能损失做法。无论哪种方式,它们都会非常快 - 我不会担心这种情况,除非你有很多(例如数千)这样的东西需要创建并且它是时间关键的,因为它们的性能应该相似。
由于您使用的格式为:NSString = NSString+NSString
,因为长度与对象一起存储,并且两个字符串的编码可能已经与目标字符串匹配,因此NSString文字对于非平凡的情况可能更快。您的示例中使用的C字符串也很容易转换为另一种编码,而且它很短。
C字符串作为一种更原始的类型,如果您需要定义它们的批次,可以减少加载时间和/或内存使用量。
对于简单的情况,在这种情况下我会坚持使用NSString
文字,除非问题比帖子暗示的要大得多。
如果您需要一个C字符串表示以及给定的一组文字,那么您可能更喜欢定义C字符串文字。定义C字符串文字也可能会强制您根据C字符串创建临时NSString
。在这种情况下,您可能希望为每个flavor定义一个,或者使用CFString
的'create CFString
和外部缓冲区'API。同样,这将是非常不寻常的情况(如果您真的没有通过这些字符串的大量集合,则进行微优化)。