Objective C 规范(来自 Apple)第 49 页指出, 每个声明实例变量的类都必须提供一个 init 方法来初始化它们
我的问题 - 为什么这是必要的?NSObject 不会为实例初始化 iVar 吗?
是否应该将 init 视为构造函数。
init一定要叫init吗?我可以做 id anObject = [[SomeClass alloc] foo ];
非常感谢。
Objective C 规范(来自 Apple)第 49 页指出, 每个声明实例变量的类都必须提供一个 init 方法来初始化它们
我的问题 - 为什么这是必要的?NSObject 不会为实例初始化 iVar 吗?
是否应该将 init 视为构造函数。
init一定要叫init吗?我可以做 id anObject = [[SomeClass alloc] foo ];
非常感谢。
init 方法类似于构造函数,但不会自动调用。你必须自己调用它。
将其称为“init”是一种常见的约定,但不是必需的。
的默认值init
不会NSObject
触及您的实例变量。规范中的声明意味着,如果您使用类似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
.Object C或者IOS也很简单,虽然没有明确的构造函数。在Apple的官方例子中,你会发现他们只是重写了allocWithZone
NSObject中的,alloc最终会调用它。所以我认为alloc
是Object C中的构造函数。但是我认为你最好使用init。它是约定或标准。所以本书使用这个词must
.不管什么编程语言初始化都必须做。只是苹果明确强调