为什么不必对数字对象进行初始化?

时间:2014-07-20 05:35:26

标签: objective-c

我来自一个略微的java背景,因为我今年在我的计算机科学课程中学到了它。我现在正在学习目标-C。最近让我困惑的是数字对象。为什么不必初始化数字对象。看下面:

    NSNumber *myFloat;

    myFloat = [NSNumber numberWithDouble: 10.09];

当我们编写自己的对象时,它们总是必须初始化如下;

    someObject x = [[someObject alloc]init]; 

那么为什么它在这里有所不同?是因为我们默认构建的对象具有初始化它们的方式吗?数字对象是否具有初始化它们的方式"由设计数字对象的程序员改变了吗?

4 个答案:

答案 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:只是一个方便的包装方法。

您可能还发现在自己的某些类中创建自己的便捷方法很有用。