今天我正在阅读一些在线代码,我发现了一些NSObject
类。
有些人有:
- (id)init
{
self = [super init];
return self;
}
有些人没有。
然后我也在我的示例代码中尝试了这个。我完全糊涂了。在此之前,我认为我们必须编写-(id)init
方法来实例化NSObject类。但是现在它没有了。
以下是我的一些疑问:
是 - (id)init方法真的有必要吗?
如果我们不使用它会发生什么。
- 醇>
如果我们不写
init
方法,那么我的代码就可以了。为什么呢?
答案 0 :(得分:3)
空-init
完全没有功能。
NSObject
已有-init
方法。 Objective-C中的方法是继承的。
它与覆盖任何其他方法相同,只需调用super:
- (void)someMethod {
[super someMethod];
}
答案 1 :(得分:2)
您可以在Apple documentation初始值设定项中找到问题的答案。我建议你仔细阅读这些材料,他们会澄清很多东西。
总结有关您问题的文档:
是 - (id)init方法真的有必要吗?
如果您在课程实例化时不需要执行额外的逻辑,那么您不需要在班级中实施init
。
如果我们不使用它会发生什么。
即使您不需要在子类中实现它,也需要在创建新对象时调用它,例如: [[MyClass alloc] init]
如果我们不写init方法,那么我的代码就可以了。为什么呢?
正如我上面所写,你不需要为你的班级申报一个,但你需要打电话给它。否则您的代码可能无法正常工作。
强烈建议 [super init]
为超类提供正确配置新创建对象的机会。
答案 2 :(得分:1)
不调用super init是一个错误,结果是未定义的。 (我发生的坏事)
答案 3 :(得分:-1)
-init()是NSObject的初始化程序。如果用户创建了继承NSObject的Person类。它可以覆盖此初始值设定项,也可以创建自己的自定义初始值设定项,如下所示 例如
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
}
}