我看到了这个帖子,但想确认一下:
How to convert NSNumber objects for computational purposes?
所以基本上你想要处理这些对象时,你必须解压缩他们的ivars,然后将它们打包回新对象,大概是NSNumbers?
这看起来很弱(背面有很大的疼痛,没有?)。
你们如何使用这些?
你避开它们吗?对它们进行子类化?是否有可变版本?这似乎是很多工作要处理它们,我们很乐意听到它们的好处以及更有经验的程序员使用它们的方式,或者他们用来避免使用它们的策略。
谢谢,
尼克
答案 0 :(得分:6)
所以基本上你想要处理这些对象时,你必须解压缩他们的ivars,然后将它们打包回新对象,大概是NSNumbers?
是。 (顺便说一下,调用doubleValue
并不仅仅意味着解压缩ivar。也许还有一些转换。)
这看起来很弱(背面有很大的疼痛,没有?)。
这种“拳击”是必要的,因为原始数字本身不支持Objective-C(Foundation.framework)的引用计数方案。例如,您必须将数字设为NSNumber
才能将其存储在NSArray
中。
你避开它们吗?
你做不到。
他们的子类?
你不应该,但如果必须,请按照它的建议:
如果你想要的只是添加一些方便的方法,例如-numberByAddingNumber:
,使用类别:
@implementation NSNumber (MyExtension)
-(NSNumber*)numberByAddingNumber:(NSNumber*)another {
double myVal = [self doubleValue];
double anotherVal = [another doubleValue];
return [NSNumber numberWithDouble:myVal + anotherVal];
}
@end
...
NSNumber* a, *b;
...
NSNumber* c = [a numberByAddingNumber:b];
...
有可变版本吗?
没有
答案 1 :(得分:3)
当我不得不对变量执行算术时,我避免使用NSNumbers。实际上,我总是避免使用它们,除非我要将它们转换为Core Data或其他东西。
答案 2 :(得分:2)
现在最新版本的clang编译器中有Objective-C Literals(版本3.2以上,Xcode 4.6附带,也可以从源代码构建),你可以做@ 42和@(7 + 35)之类的东西“盒子”NSNumbers。