繁体   English   中英

谁能给我一个关于“ self = super init”的简单解释?

[英]Can anyone give me an easy explanation about “self=super init”?

我仍然不了解self = super init; ,尽管我读了很多书和谷歌。 我知道它用于检查当前对象是否等于父类等的返回对象。但是,我不能接受这就是答案。 有人可以给我一个简单但可靠的答案吗? 谢谢!

快速的答案是,您正在告诉您的类的超类初始化该对象。 因为您是从该超类继承的,所以您可以执行特定于实现的其他初始化任务,但是首先必须确保执行了初始化的基础(由基类NSObject处理)。 从另一个类扩展(继承)的每个类都必须先确保其父类已被初始化,然后才能进行初始化。

一个非常快速组成的(因此可能很差)的类似物-在创建您的父母之前,必须先创建您的父母(超类),并且他们必须首先创建父母(他们的超类)

我建议您搜索面向对象的编程基础知识,以了解这种情况。

您提到“检查”使我认为您将=视为比较操作。 不是。 这是一项任务。 有时,分配出现在if条件中。 这利用了赋值表达式具有一个值的事实-被赋值。 因此, if (self = [super init])组合了“调用super的-init方法”,“将结果分配给self “检查我们是否从super的-init得到非零”(也就是说,那个super没有?无法初始化)。

由于这种组合的分配和测试可能会造成混淆并且容易出错,因此Apple现在建议将分配与检查失败分开:

self = [super init];
if (self)
    // ... continue initializing ...

NSObject是根类。 https://developer.apple.com/library/ios/#documentation/Cocoa/Reference/Foundation/Classes/nsobject_Class/Reference/Reference.html您可以在此处找到init方法。 NSObject类中的init方法是Objective-C中每个对象的初始化程序。 super仅返回对象的超类。

如果Class B是从Class A Class A继承的,则Class A Class A将是Class B类的超类。 再次另一类Class C ,将其从继承Class B ,超类的Class C将是Class B 等等。

当您调用[super init]; 从一个类中,它仅调用init类的init方法,而后者又调用init类的init方法,依此类推。 最后,它将到达根对象NSObject,并调用实际的init方法。 到那时,iOS将为您的对象分配内存,并为您的对象分配必要的数据结构。 阅读有关NSObject类中每个方法和属性的文档。

如果创建了MyView类,它是UIView子类,则您的类层次结构将是。

     NSObject

UIAppearanceContainer

   UIAppearance

     NSCoding

      UIView

      MyView

因此,当您在类“ MyView”中调用init方法时,它将调用

UIView的init方法

UIView将调用NSCoding的init方法

NSCoding将调用UIAppearance的init方法

UIAppearance将调用UIAppearanceContainer的init方法

UIAppearanceContainer将调用NSObject的init方法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM