主页

  • Tip6 - Block

    前言 这篇文章会有一点长,会从以下几个点进行对 Block 的剖析(当然也是基于源码): - Block 的定义 - Block 底层实现 - Block 的实质 - Block 如何截获自动变量 - block 的原理 - Block 造成的循环引用问题及解决方案 Blocks 的定义...

  • Tip5 - 谈对象了,关联对象

    前言 关联对象是用来为分类添加成员变量时使用的,那么为什么分类需要使用关联对象来添加成员变量呢?那肯定是因为正常的添加成员变量的方式在分类中不能用。 一般我们在类中声明一个属性,代码是这样的: 然后编译器会帮我们生成如下方法: 就是: - 生成一个实例变量 name - 生成 getter 方法...

  • Tip4 - 关于 Weak 应该知道的

    前言 Weak 是弱引用,它是 iOS 中用于修饰变量的一种修饰符,它有两个特点: - 被 weak 修饰符修饰的对象,引用计数不会 +1 - 被 weak 修饰符修饰的对象,在废弃时,会将 nil 赋值给该变量 所谓引用计数,是苹果用来管理内存的一种机制。当一个对象被强引用时,它的引用计数会...

  • Tip3 - 让我们搞定 GCD

    GCD 是什么? GCD,全称 Grand Central Dispatch,是异步执行任务的技术之一。一般将应用程序中记述的线程管理用的代码在系统级中实现。开发者只需要定义想执行的任务并追加到适当的 Dispatch Queue 中,GCD...

  • Tip2 - 从源码看 self class 和 super class

    前言 这篇文章起源于很古老的一个面试题,为什么一个类的 [self class] 和 [super class] 的输出是相同的,今天从源码的角度去分析一下。 场景再现: 输出: 源码 既然都是调用的 class 方法,我们就先看一下 class 方法的实现是什么: 可以发现,class...

  • Tips 1 - 消息转发的三板斧

    前言 在 Objective-C 中,一个方法的调用,编译器会将其被转成 objcmsgSend 的方式,沿着这个对象或者类的继承链,依次去查找是否有对应的方法实现,如果查找至根类,也就是 NSObject...

  • RunLoop - 同是天涯打工人

    前言 没有困难的工作,只有勇敢的打工人。 概念 如果你经历过这么一种上班状态,有需求需要开发的时候,开发需求,没有需求开发(小概率事件),下班也没有真正意义上的下班,因为群里随时有线上问题需要响应,所以得24小时待命,那当你知道 RunLoop 的机制之后,你可能会觉得很亲切。 RunLoop 是...

  • Flutter - 封装广告页的倒计时圆圈控件

    前言 很多 App 的广告页都会有一个倒计时控件,倒计时结束或者用户点击之后就会进入到 App 的主页。最近在搞一个新的 App,正好需要用到,就顺便封装一个,用的是 Flutter 提供的组件 CircularProgressIndicator,比较简单,需要的同学可以直接拿去用。 使用...

  • SwiftUI 和 UIKit 的相互引用

    前言 一般老项目都是基于 UIKit 的,随着 SwiftUI 越来越成熟,未来的趋势会趋向于使用 SwiftUI 来进行开,所以,项目的逐步迁移至 SwiftUI 也变得有必要起来。这篇文章会展示如何在 UIKit 项目中,接入 SwiftUI。而 SwiftUI...

  • 浅谈KVO

    简介 KVO,Key-Value Observing,键值观察,是一种机制,允许成为其他对象的观察者,当被观察对象的某个被观察的属性发生改变时,注册的观察者便能得到通知。 机制很简单,就比如在某宝买东西,添加了这个东西的价格变化的通知,每次价格发生变化,某宝就会发个通知告诉我,这个机制就类似...