iOS学习之——self与super

来源:互联网 发布:怎么样投诉淘宝客服 编辑:程序博客网 时间:2024/06/05 04:38

当使用 self 调用方法时,会从当前类的方法列表中开始找,如果没有,就从父类中再找;而当使用 super 时,则从父类的方法列表中开始找。然后调用父类的这个方法(从super出现的在的方法所在的类的父类开始查找。)
self和super的用法:

self、super是一个指针,self谁调用了当前方法,self就指向谁

而super指向了当前类的父类,如果super在类方法中,它就代表了调用当前类方法的类的父类,如果在对象方法中,它就代表调用当前对象方法的对象的父类对象

1>如果self、super在类方法中,那么它就代表当前调用这个类方法的类、父类
2>如果self在对象方法中,那么它就代表当前调用这个对象方法的对象、父对象
出现在对象方法中,就代表着当前对象,出现在类方法中,就代表着当前类

Self、super的用途:通下

(1)可以利用self->成员变量名访问当前对象内部的成员变量(仅在对象方法中)

(2)[self 方法名];可以调用其他的对象方法或者是类方法

[super init]的作用:
面向对象的体现,先利用父类的init方法为子类实例的父类部分进行属性初始化。
调用[super init]时可能会alloc失败,所以我们通过判断self ! =nil 来决定是否执行下面的初始化操作,如果为nil 实例创建失败,终止if内的语句执行。
在swift中,就不再允许用户去主动调用init来完成对象的创建及初始化,它是通过init构造函数来完成对象的创建。同时在swift中也有类似的“可能失败的构造器”的概念。

自定义初始化

-(id) init{    //调用父类的init方法执行初始化,将初始化得到的对象赋值给self对象    //如果self不为nil,这表明父类的init方法初始化成功    if(self == [super init])    {       //对该对象的_name,_age,_address赋初值       self->_name = @"孙悟空";       self->_age = 500;       self->_address = @"花果山水帘洞";    }    return self;}
1 0