您当前的位置:首页 > 计算机 > 编程开发 > Objective-C

类中self和“_”的使用

时间:05-12来源:作者:点击数:

对self的理解

在使用OC语言创建一个类时,底层就为我们创建好了一个self,它的使用范围仅限于在本类中(在类的实现部分)。

self代表当前方法的调用者。在OC的类中,实现部分全部都是方法(声明部分无法使用self),有类方法和对象方法。如果外界对象调用对象方法时,self就代表这个对象;同样,调用类方法时,self就代表这个类。

所以,这句话简单的理解,就是:如果self所在的这个方法是类方法,那么self就代表当前类;如果是对象方法,self就代表当前类的对象。

在self表示本类对象的时候,就具备类对象的所有功能,可以使用self来调用类中的属性,例如:self.name=@"ZhangSan";

当self表示本类的时候,可以用来调用其他类方法。

对“­_”的理解:

对于在类内部的属性调用,OC还提供了另外一种方式,就是我们之前看到的类似于“_name”的成员变量,由于我们声明的每个属性对应的都绑定着一个这样的成员变量,所以我们可以使用它来调用类中的属性。

而且使用_name还有另外一个好处,就是使用它调用这个属性的时候,不会调用这个属性的set或get方法。

可能你会问,既然它不会调用自己的get和set方法,用它干什么呢?

例如前面我们提到的,要对我们声明的属性进行重写它的get方法,方法的返回值就必须使用_name。

如果使用self.name会出现什么情况呢?

我们前面讲过self.name会调用它的set方法或get方法。这样就会出现get方法中调用get方法或者是set方法中调用set方法,如此不断重复下去,造成死循环,程序将崩溃。所以在这种地方,我们就只能使用_name的这种形式。

可能有朋友会产生疑惑,那究竟什么时候用_name,什么时候用self.name呢?

如果在编写过程中需要在类中调用本类的属性,如果这个地方必须调用get或set方法,那就必须使用self.name这种方式,如果在get或者set方法中,就必须使用_name的方式,如果不是上述的两种情况,使用哪个都可以。

“super”关键字

在OC面向对象大环境下,不但提供有本类的self,还有父类的super关键字。

super和self的使用规则一样,不同之处在于:super指父类方法的调用者。而self指当前方法的调用者。

方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
    无相关信息
栏目更新
栏目热门