0%

Objective-C 中的 Protocol 里存在 @optional 关键字,被这个关键字修饰的方法并非必须要被实现。比如最常见的 UITableViewDataSource 和 UITableViewDelegate。但是在 Swift 中的 Protocol 的所有方法都是必须被实现的。那么我们怎么样才能在 Swift 实现可选接口呢?

  • @objc & optional
  • 接口扩展
Read more »

上一篇文章中介绍了 Runtime 的一些基本知识,以及方法传递的具体流程。这篇文章本想主要介绍 Runtime 的另一个核心概念——类的动态配置。但是,发现在写动态配置时,有许多实际应用的东西,索性直接写一篇实际应用吧。

本篇文章主要介绍几种 Runtime 的实际应用:

  • 关联对象(Associated Objects)
  • “黑魔法”(Method Swizzling)
    • 方法添加
    • 方法替换
  • 实现 NSCoding 的自动归/解档
  • 字典转模型
Read more »

Objective-C 扩展了 C 语言,并加入了面向对象特性和消息传递机制。而这个扩展的核心就是 Runtime 库。它是 Objective-C 面向对象和动态机制的基石。

基于我对 Runtime 的理解,我认为它的核心知识基本都围绕两个中心:

  • 消息传递
  • 类的动态配置

Runtime 的知识点比较多,计划用三篇文章来记录下自己的学习过程:

Read more »

排序是我们的日常开发中经常会遇到的需求,例如,在商品的列表页面,我们可以根据各种维度(销量、价格、人气等)对商品的展示顺序进行改变。

所以,对各个排序的性能的了解也是基础且重要的。我们先对排序这一块进行一个整体的把握。

  • 冒泡排序
  • 选择排序
  • 插入排序
  • 希尔排序
  • 堆排序
  • 归并排序
  • 快速排序
Read more »

前面几篇文章大概介绍了几个常用的数据结构。

根据我的理解,数据结构帮助我们对需要解决的问题进行描述,而算法就是我们解决问题方案的具体描述。它包括对问题的分析及研究(建立描述问题的数学模型),然后根据一些策略和思想制定出解决问题的方案。

这篇文章讲述了四个算法设计时的常用思想并给出了相应的例子:

  • 解空间内的穷举
  • 贪婪法
  • 分治法
  • 动态规划
Read more »

链表是实现线性表的链式存储结构的一种数据结构,链表根据结定义不同也有几个种类,分别为:

  • 静态链表:用于没有指针类型的语言中。
  • 单链表:链表的结点中只有指向直接后继结点的指针域。
  • 循环链表:表中最后一个结点的指针指向头结点,整个链表形成一个环。
  • 双向链表:每个数据结点中都有两个指针,分别指向直接后继和直接前驱。

以下的实例代码,都是以单链表为例的。

Read more »