博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
self ? super ?
阅读量:7169 次
发布时间:2019-06-29

本文共 1007 字,大约阅读时间需要 3 分钟。

恩 猛的一看 好眼熟啊 莫非是我失散多年的兄弟? 好了不扯淡了

self 是干嘛的?代指本类实例 或者本类

super 不是关键子!!!记住了!!!它是个编译标记 指查找函数时从父类查找 不查找子类

那么我们常见的

-(void)viewDidLoad {

[super viewDidLoad];

}

该函数为什么要调用父类的方法的 这牵扯到继承链的知识 该方法的super调用会一直向上调用 直到让UIViewController所具有的功能都完备之后 再一层一层的函数出栈 构建好一个具有完整UIViewController实例所具备的功能  平时我们在该函数内部也会加上一些设置 添加试图等等操作 实质上是对 UIViewController功能的自定义扩充而已

如果不使用[super viewDIdLoad]继承链调用会在此环节中断掉 从而导致父类拥有的功能 子类缺无法继承 甚至直接奔溃或者报错 就好像想凭空而来一个函数 却像拥有他人的东西 这显然是不合理的

就好比 老子(老子指具有打江山的功能)打的江山 老子跪了儿子才能接班(儿子只具有管理江山的功能)  儿子在管理之前的基础是必须让老子先把江山打下来

就好像是我们调用super viewDid Load所谓的 子类能够使用父类的属性或者方法 在继承角度来看 只不过 子类实例有一个指针指向父类实例 说到底 子类拥有的一直是有子类开辟空间存储 父类也是如此 只不过 子类在生成的同时一个只属于他的父类实例   以方便子类调用父类属性或者方法 通过那根指向父类实例指针进行调用操作 而已  当父类替子类完成时 父类默默的工作 而子类却好像拥有父类的能力一样

实际的物理存储也是如此 从NSObject ->......-> UIViewController 都遵循这一规则 当我们自定义cell 不也是要写 super initWithStyle 吗 initWithFrame里面仔细看看 有木有

那么有人会说我们有时也会写很多函数里面都没有super xxxx 当然没有了 我们自定义的函数 基本可以看成一个 NSObject 所拥有的函数一样 本身就是老祖宗级别的 没有什么需要继承的吧 仔细想想吧 骚年们

super标记从当前对象向父类发送消息

转载于:https://juejin.im/post/5a329581518825214d1a40af

你可能感兴趣的文章
二手房交易流程、交易税费 搜房网
查看>>
安装veloeclipse插件报错解决方案
查看>>
QQ公众号?是的,你没看错!
查看>>
Android系统进程间通信Binder机制在应用程序框架层的Java接口源代码分析
查看>>
Oracle索引(B*tree和Bitmap)学习
查看>>
Oracle Erp常用网站
查看>>
Git 基本原理与经常使用命令
查看>>
安卓开发_浅谈Android动画(一)
查看>>
SharePoint 2013 开启访问请求 链接丢失
查看>>
WebView入门
查看>>
textarea字数限制方法一例
查看>>
基于jquery tool实现的windows桌面效果
查看>>
ORA-01012: not logged on
查看>>
百度富文本编辑器UEditor1.3上传图片附件等
查看>>
Universal Image Loader_图片异步加载
查看>>
unity3d assetbundle打包策略
查看>>
JSONObject与JSONArray的使用
查看>>
管道(Pipe)/createPipe
查看>>
Windows下搭建Eclipse+Android4.0开发环境
查看>>
TCP segment of a reassembled PDU
查看>>