iOS-《编写高质量代码》笔记-第六章 继承与面向对象设计

简介: 建议41:明确isa在继承上的作用图片发自简书App我们发现 Class 本身也有一个isa指针,指向的是它的MetaClass。当我们对一个实例发送消息时(-开头的方法),会在该 instance 对应的类的 methodLists 里查找。

建议41:明确isa在继承上的作用


img_a05a59179160f4e3ec25b460bf855a82.jpe
图片发自简书App

我们发现 Class 本身也有一个isa指针,指向的是它的MetaClass。

当我们对一个实例发送消息时(-开头的方法),会在该 instance 对应的类的 methodLists 里查找。

当我们对一个类发送消息时(+开头的方法),会在该类的 MetaClass 的 methodLists 里查找。

参考地址:

http://ios.jobbole.com/81657/

http://www.jianshu.com/p/8036f15c91c6

建议42:利用类别和协议实现类似多重继承的机制

OC 可以通过类别(Category)和协议(Protocol)实现类似多重继承的机制,可以很好地实现代码复用和扩展。

1.虽然类别可以访问基类的实例变量,但不能添加变量,如果想要添加变量,可以考虑通过继承创建子类。

2.类别可以重载原始类的方法,但不推荐这么做,这么做的后果是再也不能访问原来的方法。如果确实要重载,正确的选择是创建子类。

3.和普通接口有所区别的是,在类别中实现文件中可以不必实现所有声明的方法,只要你不去调用它。

协议并不是真正的类,它只是声明方法,不能添加数据。协议就是一系列不属于任何类的方法列表,其中声明的方法可以被任何类实现。这种模式一般称为代理模式。

建议43:类别和类扩展是类继承的延续性拓展

类扩展可以给原有的类增加新的属性和方法。类扩展常用来定义类的私有变量和方法。如果类别是为类增加外部方法的话,那么类扩展就是用做类的内部拓展。

类别关注的重心是代码设计,把不同功能的方法分离开。

类别具有替换特性,也就是说,如果类别方法与类内某个方法具有同样的方法签名,那么类别里的方法将会替换类的原有方法。zs-可以利用这个实现热更新修复bug.

建议44:继承基类的实现行为勿忘调用super

 如果打算补充基类实现的行为,请调用super.

如果打算替换基类实现的行为,就不要调用super.

目录
相关文章
|
7月前
|
Unix 开发工具 iOS开发
iOS应用逆向工程笔记 -1
iOS应用逆向工程笔记 -1
38 0
|
7月前
|
编译器 iOS开发 异构计算
读iOS核心动画笔记
读iOS核心动画笔记
28 0
|
2月前
|
iOS开发
iOS自动混淆测试处理笔记
iOS自动混淆测试处理笔记
13 0
|
3月前
|
iOS开发
  iOS 自动混淆测试处理笔记
  iOS 自动混淆测试处理笔记
|
6月前
|
iOS开发
实战编程·使用SwiftUI从0到1完成一款iOS笔记App(五)(3)
实战编程·使用SwiftUI从0到1完成一款iOS笔记App(五)
64 0
|
6月前
|
前端开发 数据处理 iOS开发
实战编程·使用SwiftUI从0到1完成一款iOS笔记App(五)(2)
实战编程·使用SwiftUI从0到1完成一款iOS笔记App(五)
52 0
|
6月前
|
iOS开发 Kotlin 容器
实战编程·使用SwiftUI从0到1完成一款iOS笔记App(五)(1)
实战编程·使用SwiftUI从0到1完成一款iOS笔记App(五)
60 0
|
6月前
|
存储 缓存 前端开发
实战编程·使用SwiftUI从0到1完成一款iOS笔记App(四)(2)
实战编程·使用SwiftUI从0到1完成一款iOS笔记App(四)
53 0
|
6月前
|
前端开发 Swift iOS开发
实战编程·使用SwiftUI从0到1完成一款iOS笔记App(四)(1)
实战编程·使用SwiftUI从0到1完成一款iOS笔记App(四)
99 0
|
6月前
|
存储 PHP Swift
实战编程·使用SwiftUI从0到1完成一款iOS笔记App(三)(2)
实战编程·使用SwiftUI从0到1完成一款iOS笔记App(三)
70 0