NSObject 中 - (id)init 的用途是什么
what is the use of - (id)init in NSObject
今天我浏览了一些在线代码,发现了一些 NSObject
Class。
有些人有:
- (id)init
{
self = [super init];
return self;
}
有些没有。
然后我也在我的示例代码中尝试了这个。我完全糊涂了。在此之前我在想我们必须写-(id)init
方法来实例化一个NSObjectClass。但现在没有它也能正常工作。
以下是我的一些疑惑:
is -(id)init method really necessary?
What happens if we don't use it.
If we don't write init
method even then my code works. Why?
空着-init
完全没有作用。
NSObject
已经有 -init
方法。 Objective-C中的方法是继承的。
这与覆盖任何其他方法一样,只需调用 super:
- (void)someMethod {
[super someMethod];
}
不调用 super init 是错误的,结果未定义。 (我遇到了坏事)
-init() 是 NSObject 的初始化器。如果用户创建一个继承 NSObject 的 Person Class。它可以覆盖这个初始化器,或者可以创建自己的自定义初始化器,如下所示
例如
class Person : NSObject
{
let name:String
//Initializer inherited from NSObject
override init()
{
super.init()
}
//Custom Initializer
init(withName name:String)
{
super.init()
self.name = name
}
}
您将在 Apple documentation 关于初始化器的文章中找到问题的答案。我建议您仔细阅读这些材料,它们会澄清很多事情。
关于您的问题的文档总结:
is -(id)init method really necessary?
如果在实例化 class 时不需要执行额外的逻辑,则不需要在 class.[=17 中实现 init
=]
What happens if we don't use it.
即使您不需要在子class中实现它,您也需要在创建新对象时调用它,例如[[MyClass alloc] init]
If we don't write init method even then my code works. Why?
正如我上面所写,您不需要为您的 class 声明一个,但您需要调用它。否则您的代码可能无法正常工作。
强烈建议使用 [super init]
,这样超级 class 就有机会正确配置新创建的对象。
今天我浏览了一些在线代码,发现了一些 NSObject
Class。
有些人有:
- (id)init
{
self = [super init];
return self;
}
有些没有。
然后我也在我的示例代码中尝试了这个。我完全糊涂了。在此之前我在想我们必须写-(id)init
方法来实例化一个NSObjectClass。但现在没有它也能正常工作。
以下是我的一些疑惑:
is -(id)init method really necessary?
What happens if we don't use it.
If we don't write
init
method even then my code works. Why?
空着-init
完全没有作用。
NSObject
已经有 -init
方法。 Objective-C中的方法是继承的。
这与覆盖任何其他方法一样,只需调用 super:
- (void)someMethod {
[super someMethod];
}
不调用 super init 是错误的,结果未定义。 (我遇到了坏事)
-init() 是 NSObject 的初始化器。如果用户创建一个继承 NSObject 的 Person Class。它可以覆盖这个初始化器,或者可以创建自己的自定义初始化器,如下所示 例如
class Person : NSObject
{
let name:String
//Initializer inherited from NSObject
override init()
{
super.init()
}
//Custom Initializer
init(withName name:String)
{
super.init()
self.name = name
}
}
您将在 Apple documentation 关于初始化器的文章中找到问题的答案。我建议您仔细阅读这些材料,它们会澄清很多事情。
关于您的问题的文档总结:
is -(id)init method really necessary?
如果在实例化 class 时不需要执行额外的逻辑,则不需要在 class.[=17 中实现 init
=]
What happens if we don't use it.
即使您不需要在子class中实现它,您也需要在创建新对象时调用它,例如[[MyClass alloc] init]
If we don't write init method even then my code works. Why?
正如我上面所写,您不需要为您的 class 声明一个,但您需要调用它。否则您的代码可能无法正常工作。
强烈建议使用[super init]
,这样超级 class 就有机会正确配置新创建的对象。