365bet中文官网

OC中自我和超级的总结

OC中自我和超级的总结
一段代码触发的想法:
@implementationSon:爸爸
- (Id)init
自我=[superinit];
是(自动){
NSLog(@“%@”,NSStringFromClass([selfclass])); //它们是
NSLog(@“%@”,NSStringFromClass([superclass])); //它们是
将被退回
@结束
问题1:我是什么人?
问题2:什么是超级?
问题3:[superinit]做了什么?
问题4:为什么我要为自己分配[superinit]的地址?
问题5:为什么NSLog Son的输出?
首先是响应区域。
答案1:
1本身是OC提供的保留字。
2本身代表当前方法的调用者。
3 - 在方法中,self代表“对象”。
在4 +方法中,self代表“class”。
5本身是方法的隐藏参数变量,它指向当前调用方法的对象。另一个隐藏参数是_cmd。这表示当前的类方法选择器。
A2:
1super是OC提供的保留字。
2 super不是隐藏参数,它只是一个“编译器指标”。
如果找到方法,则指定的方法在主类中找到一个位置。
A3:
1递归地将主类对象初始化为根对象。
A4:
在一个对象的整个过程中只有一个自我对象。没有指向主类对象的指针。
2在自我或超级对象内部,只有一个消息体是self。换句话说,self和super指的是同一个对象。
3如果未初始化父类,则返回nil并结束操作。
A5:
1见答案4;结果清楚,自我和超级是同一个实体。
其次是怀疑的领域。
分析:
在面向对象的进程中,子类继承自主类,并拥有主类的所有所有权方法。完整的类初始化包括子类初始化和主类初始化。
在两个子类[allocinit]之后,首先只存在一个对象实体。没有所谓的主要类的超级对象实体。
在初始化过程中,主类属性和方法的初始化属于子类的某些对象。超级指针被分配给自己。这是一个错误,事实上,它们都是指对象的初始位置。
摘要过程中引用了以下链接:
1
关于你自己和超级OC的问题和分析(非常有用)
2
自动=[superinit]学习
3
想想你自己=[superinit]


浏览过本文章的用户还浏览过