iOS的 - 为什么是init必要和其他的init问题

问题描述:

目标C规格(苹果)第49页指出 声明一个实例变量,必须提供每个类的init方法来初始化它们iOS的 - 为什么是init必要和其他的init问题

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

应该认为init是一个构造函数。

是否必须将init命名为init?我可以做 id anObject = [[SomeClass alloc] foo];

Muchas gracias。

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

调用它“init”是一个常见的约定,但不是一个要求。

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

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

+0

'-foo'不会是一个静态方法,如果'alloc'返回该类的一个实例... – 2012-04-07 15:39:06

+0

@ RichardJ.RossIII啊,是的,谢谢你的解释。 – 2012-04-07 15:40:31

类通常不知道他们的子类的内部和NSObject是没有不同的那种方式。

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

它不必被称为init,但它开始于init几乎是通用的。 例如:

- (id)initWithString:(NSString *)string { 
    self = [super init]; 
    if (self) { 
     self.myString = string; 
    } 
    return self; 
} 

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