初始化

  • 在 iOS 里面,无论是 Objective-C 还是 Swift,类(结构体、枚举)的初始化都有一定的规则要求,只不过在 Objective-C 中会比较宽松,如果不按照规则也不会报错,但会存在隐患,而在 Swift 则需要严格按照规则要求代码才能编译通过,极大提高了代码的安全性。
  • 类(结构体、枚举)的初始化有两种初始化器(初始化方法):指定初始化器(Designated Initializers )、便利初始化器(Convenience Initializers)。
一、Designated Initializers
  • 指定初始化器是类(结构体、枚举)的主初始化器,类(结构体、枚举)初始化的时候必须调用自身或者父类的指定初始化器。
  • 一个类(结构体、枚举)可以有多个指定初始化器,作用是代表从不同的源进行初始化。一个类(结构体、枚举)除非有多种不同的源进行初始化,否则不建议创建多个指定初始化器。
  • 在 iOS 里,视图控件类,如果:UIView、UIViewController就有两个指定初始化器,分别代表从代码初始化、从Nib初始化
二、Convenience Initializers
  • 便利初始化器是类(结构体、枚举)的次要初始化器,作用是使类(结构体、枚举)在

iOS之深入解析Objective-C和Swift初始化相关推荐

  1. iOS之深入解析多环境配置的实现方案

    一.多 target 形式配置多环境 如下所示,选择工程 TARGETS,新创建一个 targets: 创建完成后,可要发现产生了一个 plist 文件,这个 plist 就是对应新创建的 targe ...

  2. iOS游戏框架Sprite Kit基础教程——Swift版上册

    iOS游戏框架Sprite Kit基础教程--Swift版上册 试读下载地址:http://pan.baidu.com/s/1qWBdV0C  介绍:本教程是国内唯一的Swift版的Spritekit ...

  3. iOS之深入解析dyld与ObjC关联的底层原理

    App启动与dylb加载 我们知道 dyld 的加载过程,即在 App 启动启动执行 main 函数之前,dylb 主要作了环境变量配置.共享缓存.主程序的初始化.插入动态库.链接主程序.链接动态库. ...

  4. iOS之深入解析objc_msgSend消息转发机制的底层原理

    一.抛砖引玉 objc_msgSend() 消息发送的过程就是 通过 SEL 查找 IMP 的过程 . objc_msgSend() 是用 汇编语言 实现的,使用汇编实现的优势是: 消息发送的过程需要 ...

  5. iOS之深入解析Runtime的objc_msgSend“慢速查找”底层原理

    CacheLookup 快速查找 objc_msgSend 通过汇编 快速查找方法缓存 ,如果能找到则调用 TailCallCachedImp 直接将方法缓存起来然后进行调用,如果查找不到就跳到 Ch ...

  6. iOS之深入解析消息转发objc_msgSend的应用场景

    一.消息转发 现有如下示例: id o = [NSObject new]; [o lastObject]; 执行上面代码,程序会崩溃并抛出以下异常: [NSObject lastObject]: un ...

  7. iOS之深入解析UmbrellaFramework的封装与应用

    一.umbrella framework 将多个已经封装好的 framework 封装成一个,封装的这种 framework 就是 umbrella framework. Apple 的官方文档中明确 ...

  8. iOS之深入解析CFRunloop的多线程隐患

    一.前言 如果还不了解 Runloop,请参考我之前的博客:iOS之深入解析Runloop的底层原理. 在苹果官方文档中,声明了 CFRunloop 是线程安全的,但是需要注意的是,Apple 使用了 ...

  9. iOS之深入解析WKWebView加载的生命周期与代理方法

    一.前言 从 WebView 开始加载一条请求,到页面完整呈现这一过程发生了什么?无论是做 WebView 性能优化还是异常问题监控与排查,都离不开对WKWebView加载的生命周期与代理方法的剖析. ...

  10. iOS之深入解析类加载的底层原理:类如何加载到内存中

    一.App 启动与 dylb 加载 App 启动会由 libdyld.dylib 库先于 main 函数调用 start,执行 _dyld_start 方法,然后运用汇编实现调用 dyldbootst ...

最新文章

  1. 网页缩放zoom用法
  2. JAVA网络编程之Socket
  3. modbus rtu java 通讯_android Modbus Rtu 通讯例子
  4. Flutter进阶—自定义主题风格
  5. 使用redux和axios获取api数据
  6. HUE与Zookeeper的集成
  7. nginx+lua+redis实现post请求接口之黑名单(一)
  8. VS2010中的单元测试【转载】
  9. 空间矢量脉冲宽度调制(SVPWM)Simulink仿真教程
  10. ueditor html模板,UEditor 编辑模板
  11. Oracle VM VirtualBox的安装以及安装win 7系统
  12. Ubuntu虚拟机使用桥接模式设置IP
  13. 微信小程序:注册微信小程序
  14. Hrbust 1162 魔女 【dp】
  15. mongodb权威指南读书笔记
  16. 日本python教程视频_清华学姐推荐的python视频400集,拿走不谢
  17. Vscode批量处理
  18. weblogic数据源配置oracle12C报错ONS configuration failed
  19. 关于char的双引号与单引号的正确用法(摘)
  20. 为什么离开以前的公司

热门文章

  1. 浅谈unity中gamma空间和线性空间
  2. 【BZOJ3772】精神污染
  3. vs2012搭建gtest环境
  4. Python3.4连接Mysql
  5. OC-数组排序-NSSortDescriptor使用
  6. GridPanel的一些小技巧
  7. 轻松一下——高考笑句
  8. c++ 不允许使用不完整的类型_Python入门高级教程--Python?变量类型
  9. 永恒python怎么强化_永恒python加6_pythontip 挑战python (6-10)
  10. 创建一个dynamics 365 CRM online plugin (一) - Hello World Plugin