请告诉我这段代码的含义:
- (id) initWithNumber: (int) n {
self = [super init];
if (self) {
self->_number = n;
}
return self;
}
答案 0 :(得分:3)
- (id) initWithNumber: (int) n {
这是一个初始值设定项,它将int
命名为n
作为唯一参数。
self = [super init];
与许多OO语言一样,self
是代表"当前"的名称。宾语。您通常不会为self
分配新值,但是您在初始化程序中执行此操作,因为它在Objective-C中实际上是合法的,初始化程序返回的对象不同于分配。实际发生的情况非常罕见,但可能发生,因此惯例是将超类初始值设定项的结果分配给self
。说到这一点,super
是一个关键字,实际上意味着与self
相同的对象,但告诉编译器开始搜索超类中的匹配方法。 super
是你如何调用继承的方法。因此,该行调用继承的方法init
,该方法就超类而言初始化对象,并将结果赋给self
。
if (self) {
由于某种原因,[super init]
可能会失败,如果是这样,它将返回nil
。在进行任何进一步的初始化之前检查对象是否为零非常重要。
self->_number = n;
这是一条愚蠢的路线。由于self
是指向对象的指针,因此取消引用该指针并访问底层结构的字段是合法的,这就是->
运算符的作用。但是当前对象已经在范围内了,所以你可以说_number = n;
而不是简单。实例变量始终在实例方法的范围内,因此您永远不需要self->...
。
}
return self;
如上所述,初始值设定项需要返回指向对象的指针,因此返回self
。
}
答案 1 :(得分:0)
你真的想知道什么?
它是类的初始代码,在此方法中,实例属性number
设置为值n
。