iOS开发 self与super总结
来源:互联网 发布:游戏公司美工 编辑:程序博客网 时间:2024/05/22 03:52
一段代码引发的思考:
@implementation Son : Father- (id)init{ self = [super init]; if (self) { NSLog(@"%@", NSStringFromClass([self class])); //Son NSLog(@"%@", NSStringFromClass([super class])); //Son } return self;} @end
问题1:self 是什么 ?
1.self 是 OC 提供保留字;
2.self 代表着当前方法的调用者;
3.在 - 方法中,self代表着"对象";
4.在 + 方法中,self代表着"类";
5.self 是方法的隐藏的参数变量,指向当前调用方法的对象,另一个隐藏参数是 _cmd,代表当前类方法的selector。
问题2:super 是什么 ?
1.super 是 OC 提供保留字;
2.super 不是隐藏的参数,它只是一个"编译器指示符"。查找方法时,指定方法查找的位置在父类。
问题3:[super init] 到底做了什么 ?
1.递归初始化父类对象,直到root对象;
问题4:为什么把 [super init] 的地址赋值给 self ?
1.整个对象过程中只有一个对象 self ,不存在父类对象的指针;
2.对象内部不管是 self 还是 super 其消息主体只有一个就是 self ,也就是说 self 和 super 指向的是同一个对象;
3> 在父类初始化失败的时候,返回nil,终止操作。
问题5:为什么NSLog的输出都Son ?
1.参见 答4 ,结果显而易见,self 和 super是同一个实体。
解析:
1.面向对象过程中,子类继承父类,就拥有了父类所有的属性方法,一个完整的类的初始化包括子类初始化和父类初始化。
2.子类 [alloc init] 后,首先这里只有一个对象实体self,没有所谓的父类对象实体super。初始化过程中,父类属性、方法初始化都属于子类对象的一部分,super 的指针赋给 self 这一说法是错的,其实全部指的是该对象的初始位置。
总结的过程中参考了以下链接:
1. 关于 self 和 super 在 OC 中的疑惑与解析(帮助很大)
2. self = [super init] 的学习
3. self = [super init] 的思考
- iOS开发 self与super总结
- iOS开发中self和super
- ios开发self和super的区别
- OC 中 self 与 super 总结
- self与super
- super 与 self
- iOS学习之——self与super
- Objective-C(三、类与继承,基类,self、super关键字,多态,组合)——iOS开发基础
- iOS 之self和super
- IOS self = [super init];
- IOS开发self.的用法总结
- self与super的区别
- self与super的区别
- self 与 super 的区别
- self与super 怎么理解?
- self与super的区别
- OC中self与super
- IOS开发(49)之关于 self与内存相关的用法总结
- 那些让我难以忘记的TED演讲
- linux环境内存分配原理 mallocinfo
- 设计模式之访问者模式
- SpringMVC基础
- NSTimer的使用
- iOS开发 self与super总结
- mysql执行计划详解
- 消息传递机制
- 程序猿的情话
- “一带一路”有哪些机会?马云董明珠曹德旺这么说
- sass编译成css时显示乱码
- 【纯干货】我所知道的苹果审核4.3问题,和它的10种解决办法!
- "Java:comp/env/"讲解与JNDI
- 使用 Agora SDK 实现视频对话应用 HouseParty-附 Android 源码