将Integer转换为NSString的计算过于昂贵

时间:2015-03-19 08:41:03

标签: objective-c iphone xcode

我使用NSMutableDictionary作为哈希表。我通过执行一些整数操作生成我的哈希键,因此最终生成的哈希键是一个整数。

我知道很容易将整数键转换为NSString,以便将其用作我的NSMutableDictionary的键。我可以通过使用[NSString stringWithFormat ...];来实现。但问题是该方法中包含的隐式转换(stringWithFormat ...)对于我正在做的事情来说计算过于昂贵。这种方法会减慢我的所有应用程序。

你知道解决这个问题吗?

就像使用整数作为我的哈希表的关键字一样?或者将整数转换为NSStrings的有效方法?

谢谢!

2 个答案:

答案 0 :(得分:1)

我想你想要使用一个字符串,因为你认为,你必须这样做。确实,您不能使用NSInteger之类的标量类型,但您可以使用符合NSCopying的类的每个对象。

因此,您可以将整数转换为NSNumber的实例,并将其用作关键字。

id value = …
NSInteger hash = …
NSDictionary *dictionary = …;
[dictionary setObject:… forKey:@(hash)];
…
value = [dictionary objectForKey:@(hash)];

我很确定这会更快。 (内部有一些"脏黑客和#34;用于快速生成整数。)

此外,将对象复制到NSDictionary可能会很慢。您可以使用NSMapTable,配置为不复制,而不是

编辑使用NSDictionary的访问方法。

  

通常,密钥可以是任何对象(前提是它符合   NSCopying协议 - 见下文),但请注意使用键值时   编码密钥必须是一个字符串(参见键值编码基础知识)。

答案 1 :(得分:0)

试试这个

int a = 35;
NSString* string = [@(a) stringValue];