【发布时间】:2014-09-28 10:41:34
【问题描述】:
我的代码中有一个时间敏感部分,用于存储、检索和替换 NSMutableDictionary 中的值。问题是我需要存储对象,而不是原语,并且需要在堆上分配对象。但是,一旦字典中存在一个对象并且我想替换该值,而不是分配另一个数字,我不能简单地用新的 int 替换当前的堆文字,无论它在哪里?
问题是,我一直在存储 NSNumber,但我无法更改 NSNumber 的值,因为 they are immutable。
目前,我使用@() 包装运算符创建一个 NSNumber,我认为必须将其复制到堆中才能存储在字典中。
-(void)setInt: (int)value For: (NSString *)key {
[self.dictionary setValue:@(value) forKey:key];
}
我想用 C 替换一个对象的原语会很容易:
-(void)setInt: (int)value For: (NSString *)key {
SomeMutableIntClass * oldValue;
oldValue = (SomeMutableIntClass *) [self.dictionary objectForKey:key];
oldValue.int = value; // Direct copy like a pointer since int is primitive
}
我想知道我是否应该只创建一个具有一个 int 属性的 Integer 类。即使我开始制作自己的课程,这实际上会更快并且需要更少的分配我当前的代码吗?
【问题讨论】:
-
正确。您的解决方案将“更快”。但它可能不会让您的程序对用户来说明显更快——只有分析可以显示这一点。
标签: objective-c performance int nsmutabledictionary alloc