Objective-C 中对 self 和 super 的理解

Objective-C 中对 self 和 super 的理解

@implementation Son
- (instancetype)init {
self = [super init];
if (self) {

    // 1、self 是类的隐藏参数,指向当前调用方法的这个类的实例
    // 2、super 是一个 Magic Keyword, 它本质是一个编译器标示符,和 self 是指向的同一个消息接受者
    // 3、当使用 self 调用方法时,会从当前类的方法列表中开始找,如果没有,就从父类中再找;而当使用 super 时,则从父类的方法列表中开始找。然后调用父类的这个方法
    NSLog(@"%@",NSStringFromClass([self class]));   // 输出 Son
    NSLog(@"%@",NSStringFromClass([super class]));  // 输出 Son
}
return self;
}

疑问点:父类中此时若使用点语法( self.lastName )也即 setter 设置方法,那么调用将会是子类的设置方法,为什么?

runtime如何通过selector找到对应的IMP地址?

每一个类对象中都一个方法列表,方法列表中记录着方法的名称,方法实现,以及参数类型,其实selector本质就是方法名称,通过这个方法名称就可以在方法列表中找到对应的方法实现.

使用runtime Associate方法关联的对象,需要在主对象dealloc的时候释放么?

ARC 、MRC都不需要

objc中的类方法和实例方法有什么本质区别和联系?

类方法:

  • 类方法是属于类对象的
  • 类方法中的self是类对象
  • 类方法可以调用其他的类方法
  • 类方法中不能访问成员变量(类方法中不能访问成员变量、不能调用对象方法)
  • 类方法中不能直接调用对象方法

实例方法:

  • 实例方法是属于实例对象的
  • 实例方法只能通过实例对象调用
  • 实例方法中的self是实例对象
  • 实例方法中可以访问成员变量
  • 实例方法中直接调用实例方法
  • 实例方法中也可以调用类方法(通过类名)