你可以告诉我这段代码意味着什么

时间:2016-03-15 06:56:04

标签: ios objective-c

请告诉我这段代码的含义:

- (id) initWithNumber: (int) n {
    self = [super init]; 
    if (self) {
        self->_number = n;    
    }
    return self;
}

2 个答案:

答案 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