我来自一个略微的java背景,因为我今年在我的计算机科学课程中学到了它。我现在正在学习目标-C。最近让我困惑的是数字对象。为什么不必初始化数字对象。看下面:
NSNumber *myFloat;
myFloat = [NSNumber numberWithDouble: 10.09];
当我们编写自己的对象时,它们总是必须初始化如下;
someObject x = [[someObject alloc]init];
那么为什么它在这里有所不同?是因为我们默认构建的对象具有初始化它们的方式吗?数字对象是否具有初始化它们的方式"由设计数字对象的程序员改变了吗?
答案 0 :(得分:4)
他们被初始化了。 numberWithDouble:
方法相当于调用[[NSNumber alloc] initWithDouble:]
。以类似的方式,您可以使用NSArray *array = [NSArray arrayWithObjects:object1, object2]
或[NSArray *array = [[NSArray alloc] initWithObjects:object1, object2]
制作数组。
您还可以查看this question有关此实施背后的原因。
答案 1 :(得分:3)
它们已初始化,请查看[[NSNumber alloc] init...]
方法。 numberWithDouble
是一种通过[[NSNumber alloc] initWithDouble:]
创建NSNumber实例的类方法。
也不要忘记创建NSNumber的文字
@10.09
@(9 + 1.09)
@YES
和NSDictionary
@{@"key": @"value"}
@{@"enabled": @YES}
答案 2 :(得分:1)
它只是一种方便的方法来分配/初始化NSNumber实例并将其值设置为float。它并不意味着NSNumber是特殊的,并且不需要alloc / init。你可以在Cocoa和Cocoa Touch上找到这样的方法,你可以为你的自定义类做同样的事情。
答案 3 :(得分:0)
在内部,numberWithDouble的实现将是这样的:
@implementation NSNumber (NSValueCreation)
+ (instancetype) numberWithDouble:(double)value
{
return [[self alloc] initWithDouble:value];
}
@end
numberWithDouble:只是一个方便的包装方法。
您可能还发现在自己的某些类中创建自己的便捷方法很有用。