Category与Extension
在Objective-C中,要扩展一个类的方法,首先想到的应该是继承,这是面向对象语言的一个特性。继承可以很方便的增加方法,属性等,同时还可以覆写父类的方法。但是,对于大型而复杂的类,继承会导致维护困难。这时Category就可以发挥作用了。 什么是CategoryCategory是Objectiv ...
Read more
解析objc_msgSend(ARM64)
概览每个Objective-C对象都有相应的类,这个类都有一个方法列表。类中的每个方法都有一个选择子、一个指向方法实现的函数指针和一些元数据。objc_msgSend的工作就是通过传入的对象和选择子,查找相应方法的函数指针,然后跳转到该函数指针。 查找方法的流程是非常复杂的。如果这个方法没有在对应的 ...
Read more
Objective-C Runtime中的并发内存释放
Mac和iOS代码中的核心是Objective runtime机制,而runtime的核心是objc_msgSend方法,objc_msgSend的核心是方法缓存机制。今天我们将探索Apple如何在线程安全的情况下改变方法缓存内存的大小和释放,而同时又不影响性能。 消息发送概念objc_msgSen ...
Read more
GCDAsynSocket之TCP简析
GCDAsynSocket是一个开源的基于GCD的异步的socket库。它支持IPV4和IPV6地址,TLS/SSL协议。同时它支持iOS端和Mac端。本篇主要介绍一下GCDAsynSocket中的TCP用法和实现。 首先通过下面这个方法初始化一个GCDAsynSocket对象。- (id)init ...
Read more
NSOperation
NSOperation表示了一个独立的计算单元。作为一个抽象类,它给了它的子类一个十分有用而且线程安全的方式来建立状态、优先级、依赖性和取消等的模型。你可以使用系统提供的NSBlockOperation和NSInvocationOperation方法来创建一个operation,也可以创建一个继承N ...
Read more
GCD简析
Grand Central Dispatch是一种异步执行任务技术。Dispatch Queue是执行处理的等待队列。它按照追加的顺序(FIFO)执行处理。Dispatch Queue按照是否等待处理可以分为serial Dispatch Queue和Concurrent Dispatch Queu ...
Read more
Run Loops
Run LoopsRun loops是线程基础机构中非常重要的一环。它是一个处理事件的循环,帮助你安排事件工作和协调接收到的事件。其目的是在工作时让线程处理,在没工作时让线程休眠。runloop的不是完全自管理的,你必须在适当的时机启动它来处理接收到的事件。你可以使用Cocoa和Core Found ...
Read more
AutoreleasePool与内存管理
NSAutoreleasePool是一个支持Cocoa引用计数的内存管理系统的对象。 自动释放池自动释放池(autorelease pool)会在消失时向池里的对象发送一条release消息。因此池里的对象会延迟释放直到自动释放池结束(如果这个对象还是retained,还是不会释放)。应用(Appl ...
Read more
Block源码分析
什么是BlockBlock是带有自动变量(局部变量)的匿名函数。Block的内部数据结构如下: struct Block_layout { void *isa; int flags; int reserved; void (*invoke)(void *, ...); ...
Read more
SDWebImage源码分析
SDWebImage库是一个支持缓存的异步图片下载库。为了方便使用,它提供了UIImageView, UIButton, MKAnnotationView等UI组件的分类。它的优点包含以下: 异步图片下载器 异步的内存+磁盘图片缓存,自动缓存过期处理 后台图片解压 同一个URL不会多次下载的保证机 ...
Read more