[self class]、[self superclass]、[super class]分别表示什么意思?
- [self class]是表示当前类、self是指向自己的指针,可以打印出来
- [self superclass] 是表示当前类的父类
- [super class] : 首先super不是指针,只是关键字,不能打印出来;其次这个
[super class]
表示的是当前对象,而且super
可以用来调用父类方法,比如[super init]
,表示当前类对象调用父类初始化方法。
因为子类继承自父类,需要获得父类的实例和方法等,所以初始化子类之前要先保证父类已经初始化完毕,防止出错。当调用
self = [super init]
方法时,如果父类初始化不成功,那么会返回nil
,所以可以根据self
是否为nil
判断父类是否初始化成功,从而进行合理地处理,以便起到容错效果。
引申:使用
dealloc
方法释放对象时,为什么一定要调用[super dealloc]
方法?在何处调用?
- 因为子类的很多
实例变量
是继承自父类的,所以要调用[super dealloc]
方法来释放从父类继承来的实例变量,实际上还是释放自己的实例变量,只是继承来的这部分只能调用父类的dealloc
方法来释放。 - 按照自下往上的逻辑,一般要先释放子类的实例,然后释放父类的实例。自下往上的原因是,在调用
[super dealloc]
方法之前如果不先把子类中的变量从内存中释放掉,容易造成子类中变量的内存积压,导致内存泄漏,所以[super dealloc]
方法应该在释放掉子类变量之后最后调用。当然在ARC中就不需要考虑这些问题
了,变量会自动释放,此方法也不存在了。