iOS的 - 为什么是init必要和其他的init问题
目标C规格(苹果)第49页指出 声明一个实例变量,必须提供每个类的init方法来初始化它们iOS的 - 为什么是init必要和其他的init问题
我的问题 - 为什么这是必要的?不是NSObject初始化一个实例的iVar?
应该认为init是一个构造函数。
是否必须将init命名为init?我可以做 id anObject = [[SomeClass alloc] foo];
Muchas gracias。
init方法与构造函数类似,但不会自动调用。你必须自己调用它。
调用它“init”是一个常见的约定,但不是一个要求。
默认init
的NSObject
不会触及你的实例变量。 spec中的声明意味着如果您使用类似NSString *str
或NSDate *d
的对象作为类的实例变量,则需要对其进行初始化。这通常发生在init
,尽管你可以用其他方法初始化它们。
是的,你可以有[[SomeClass alloc] foo]
返回一个对象。
类通常不知道他们的子类的内部和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苹果明确强调它
'-foo'不会是一个静态方法,如果'alloc'返回该类的一个实例... – 2012-04-07 15:39:06
@ RichardJ.RossIII啊,是的,谢谢你的解释。 – 2012-04-07 15:40:31