Tip6 - Block
前言 这篇文章会有一点长,会从以下几个点进行对 Block 的剖析(当然也是基于源码): - Block 的定义 - Block 底层实现 - Block 的实质 - Block 如何截获自动变量 - block 的原理 - Block 造成的循环引用问题及解决方案 Blocks 的定义...
前言 这篇文章会有一点长,会从以下几个点进行对 Block 的剖析(当然也是基于源码): - Block 的定义 - Block 底层实现 - Block 的实质 - Block 如何截获自动变量 - block 的原理 - Block 造成的循环引用问题及解决方案 Blocks 的定义...
前言 关联对象是用来为分类添加成员变量时使用的,那么为什么分类需要使用关联对象来添加成员变量呢?那肯定是因为正常的添加成员变量的方式在分类中不能用。 一般我们在类中声明一个属性,代码是这样的: 然后编译器会帮我们生成如下方法: 就是: - 生成一个实例变量 name - 生成 getter 方法...
前言 Weak 是弱引用,它是 iOS 中用于修饰变量的一种修饰符,它有两个特点: - 被 weak 修饰符修饰的对象,引用计数不会 +1 - 被 weak 修饰符修饰的对象,在废弃时,会将 nil 赋值给该变量 所谓引用计数,是苹果用来管理内存的一种机制。当一个对象被强引用时,它的引用计数会...
GCD 是什么? GCD,全称 Grand Central Dispatch,是异步执行任务的技术之一。一般将应用程序中记述的线程管理用的代码在系统级中实现。开发者只需要定义想执行的任务并追加到适当的 Dispatch Queue 中,GCD...
前言 这篇文章起源于很古老的一个面试题,为什么一个类的 [self class] 和 [super class] 的输出是相同的,今天从源码的角度去分析一下。 场景再现: 输出: 源码 既然都是调用的 class 方法,我们就先看一下 class 方法的实现是什么: 可以发现,class...
前言 在 Objective-C 中,一个方法的调用,编译器会将其被转成 objcmsgSend 的方式,沿着这个对象或者类的继承链,依次去查找是否有对应的方法实现,如果查找至根类,也就是 NSObject...
前言 没有困难的工作,只有勇敢的打工人。 概念 如果你经历过这么一种上班状态,有需求需要开发的时候,开发需求,没有需求开发(小概率事件),下班也没有真正意义上的下班,因为群里随时有线上问题需要响应,所以得24小时待命,那当你知道 RunLoop 的机制之后,你可能会觉得很亲切。 RunLoop 是...
前言 很多 App 的广告页都会有一个倒计时控件,倒计时结束或者用户点击之后就会进入到 App 的主页。最近在搞一个新的 App,正好需要用到,就顺便封装一个,用的是 Flutter 提供的组件 CircularProgressIndicator,比较简单,需要的同学可以直接拿去用。 使用...
前言 一般老项目都是基于 UIKit 的,随着 SwiftUI 越来越成熟,未来的趋势会趋向于使用 SwiftUI 来进行开,所以,项目的逐步迁移至 SwiftUI 也变得有必要起来。这篇文章会展示如何在 UIKit 项目中,接入 SwiftUI。而 SwiftUI...
简介 KVO,Key-Value Observing,键值观察,是一种机制,允许成为其他对象的观察者,当被观察对象的某个被观察的属性发生改变时,注册的观察者便能得到通知。 机制很简单,就比如在某宝买东西,添加了这个东西的价格变化的通知,每次价格发生变化,某宝就会发个通知告诉我,这个机制就类似...