iOS 多线程之GCD

前言

在学习Android编程的时候,我们经常会使用 runOnUiThread(),把UI相关的操作放到里面。而一些耗时的操作,则放到一个新的后台线程,但在iOS在使用GCD的时候,我们把定义的任务追加到适当的Dispatch Queue中Dispatch以FIFO(先进先出,First-In-First-Out)的顺序执行任务。在iOS中有两种队列,分别是串行队列和并发队列。

串行队列,很明显一次只能执行一个任务,而并发队列则可以一次性执行多个任务。iOS 系统就是使用这些队列来进行任务调度的,它会根据调度任务的需要和系统当前的负载情况动态地创建和销毁线程,而不需要我们手动地管理。

阅读全文

iOS 多线程之NSThread

前言

多线程的好处不必多说,当用户下载资源,播放音频等耗时操作,都需要用到多线程。多线程为APP提供了良好的体验,在iOS开发中,Apple提供了多种多线程方案.

阅读全文

Objective-C Runtime 使用

原来想写一下Runtime的实际应用,想了一下,自已才疏学浅,除了关联对象和Method Swizzle。但这两个知识点很多高人写得都很好,我觉得直接转一下就好了。哈哈~

##Encode小技巧
突然想起还有个encode的小技巧,虽然我觉得应该不少人知道这个吧,但作为一个代码段,我觉得这个小技巧还是挺有用的。主要是利用反射获取类的成员变量名,再加上KVO就可以获取值与设值。

阅读全文

Objective-C Runtime 中篇

objc_msgSend方法

在前面我们讲到[receiver message]会被编译器转化为

objc_msgSend(receiver, @selector(message))

同时,我们也知道在一个对象里面有个methodLists这样子的属性。今天我们就讲下大概是什么调用方法的呢?

首先判断一下receiver对象是否为空,在Objective-C中向nill发送消息是不会Crash的,取出receiver对象里面的cache方法列表,在里面查找方法。找不到的话,那就从methodList方法里面查找。如果再找不到,就按照我们之前说的元类那个图一样,一层一层往父类找。直到找到为止,如果确实找不到,那就执行消息转发。如下图:

阅读全文

Objective-C Runtime 上篇

前言

Objective-C 是一门动态语言,在它里面有一个叫运行系统的东西,称之为runtime。runtime它究竟长什么样呢?为什么Objective-C调用对象的方法称为传递消息呢?本文将在下面回答这两个问题。

阅读全文

Hexo使用方法记录

Welcome to Hexo! This is your very first post. Check documentation for more info. If you get any problems when using Hexo, you can find the answer in troubleshooting or you can ask me on GitHub.

阅读全文