1

Objective C 规范(来自 Apple)第 49 页指出, 每个声明实例变量的类都必须提供一个 init 方法来初始化它们

我的问题 - 为什么这是必要的?NSObject 不会为实例初始化 iVar 吗?

是否应该将 init 视为构造函数。

init一定要叫init吗?我可以做 id anObject = [[SomeClass alloc] foo ];

非常感谢。

4

4 回答 4

0

init 方法类似于构造函数,但不会自动调用。你必须自己调用它。

将其称为“init”是一种常见的约定,但不是必需的。

于 2012-04-07T15:32:28.503 回答
0

的默认值init不会NSObject触及您的实例变量。规范中的声明意味着,如果您使用类似NSString *strNSDate *d对象作为类的实例变量,则您有责任对其进行初始化。这通常发生在 中init,尽管您可以在其他方法中初始化它们。

是的,您可以[[SomeClass alloc] foo]返回一个对象。

于 2012-04-07T15:33:37.243 回答
0

类通常不知道其子类的内部结构,而 NSObject 在这方面也没有什么不同。

alloc+init非常像构造函数,只是链接不是自动的。

它不必被称为init,但以它开头init几乎是普遍的。例如:

- (id)initWithString:(NSString *)string {
    self = [super init];
    if (self) {
        self.myString = string;
    }
    return self;
}
于 2012-04-07T15:36:13.183 回答
0

首先没有必要。init用于初始化实例变量的属性。当你使用自己的类时,你不会唤起 init。在我看来,alloc等于constructor。通过一个非常简单的例子我告诉了原因。当我们想使用单例模式时,很容易补充java或者其他编程语言用constructor.Object C或者IOS也很简单,虽然没有明确的构造函数。在Apple的官方例子中,你会发现他们只是重写了allocWithZoneNSObject中的,alloc最终会调用它。所以我认为alloc是Object C中的构造函数。但是我认为你最好使用init。它是约定或标准。所以本书使用这个词must.不管什么编程语言初始化都必须做。只是苹果明确强调

于 2014-07-31T09:59:38.927 回答