iOS中 类方法和实例方法及self和super

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了iOS中 类方法和实例方法及self和super相关的知识,希望对你有一定的参考价值。

参考技术A

1、类方法 :Class Method 有时被称为静态方法,类方法可以独立于实例对象而执行。在使用类方法时要注意以下几点:

2、实例方法: 必须由类的实例对象调用,可以访问属性,实例变量,同样可以访问类对象,使用限制相对于类方法较少。

总的来说: self 会优先调用本类中的方法, super 会优先调用父类方法。但是, self 是指向本类的指针,是类的隐藏参数,指向当前调用方法的对象(类对象或者实例对象), super 却不是指向父类的指针,只是一个编译器标识符,其在运行时中与self相同,指向 同一个消息接受者 ,只是 self 会优先在当前类的methodLists中查找方法,而 super 则是优先从父类中查找, 向super发送消息是一种调用继承链上的超类定义的 方法实现 的方法。

结果分析:

经过上面的例子再回来看self和super的实现原理可能更加好理解:

这样结合上述例子和self和super的原理就会很容易明白为什么 [self class] 和 [super class] 输出结果会是一样的,同时在 BaseViewController 的 viewDidLoad 中 [self class] 和 [super class] 输出都是子类类对象了

ios中关于类方法和实例方法及self和super

类方法和实例方法的调用 super this 访问控制符

一、类方法和实例方法的调用

先看一道选择题:
下列哪种说法是正确的( )
  A. 实例方法可直接调用超类的实例方法
  B. 实例方法可直接调用超类的类方法
  C. 实例方法可直接调用其他类的实例方法
  D. 实例方法可直接调用本类的类方法

先复习一下,类方法(static方法)
在类方法中,不能引用实例变量
不能使用super、this关键字
不能调用类方法

不考虑访问修饰符的话,
实例方法可以通过super.方法名,对象名.方法名调用父类的实例方法
实例方法可以通过类名.方法名,super.方法名调用父类的静态方法
实例方法通过this.方法名调用本类的其他方法
本类的静态方法还可以用类名.方法名调用。
在本题中,如果是私有的,ABC都不能访问   所以选D

二、java中super关键字
1.在子类构造器中显示调用父类构造器(super必须出现在子类构造器的第一行)
2..可以在子类中充当临时父类对象,super.方法名调用父类的方法


三、java中this关键字
1.代表当前对象,指向成员变量和成员方法
2.指向某个构造方法,通过this调用其他构造方法。
this();//代表无参构造方法
 

四、访问控制符

访问级别       访问控制修饰符        同类       同包       子类      不同的包
  公开级别:       public                y          y          y          y
  受保护           protected             y          y          y
   默认           没有访问控制符      y          y
   私有             private                  y

 

以上是关于iOS中 类方法和实例方法及self和super的主要内容,如果未能解决你的问题,请参考以下文章

c3算法和 mro super用法

创建python对象错误的实例 - 如何调用super方法?

对象 类

类方法和实例方法的调用 super this 访问控制符

python 面向对象MRO C3算法 super

python调用父类方法的三种方式(super调用和父类名调用)