iOS多线程
火车追随者
这个作者很懒,什么都没留下…
展开
-
block介绍(三)揭开神秘面纱(上)
上一篇我们总结了各个情况下,block及其引用到的内存位置情况。接下来几篇,我们将剖析编译器转码以及运行时库源码来一探block的究竟。 block到底是什么我们使用clang的rewrite-objc命令来获取转码后的代码。 1、block的底层实现我们来看看最简单的一个block:图一 这个block仅仅打印栈变量i和j的值,其被clang转转载 2013-10-14 17:52:05 · 656 阅读 · 0 评论 -
GCD介绍(四): 完结
Dispatch Queue挂起dispatch queue可以被挂起和恢复。使用 dispatch_suspend函数来挂起,使用 dispatch_resume 函数来恢复。这两个函数的行为是如你所愿的。另外,这两个函数也可以用于dispatch source。一个要注意的地方是,dispatch queue的挂起是block粒度的。换句话说,挂起一个queue并不会将当前正在执行的转载 2013-10-14 17:13:57 · 703 阅读 · 0 评论 -
GCD介绍(二): 多核心的性能
概念为了在单一进程中充分发挥多核的优势,我们有必要使用多线程技术(我们没必要去提多进程,这玩意儿和GCD没关系)。在低层,GCD全局dispatch queue仅仅是工作线程池的抽象。这些队列中的Block一旦可用,就会被dispatch到工作线程中。提交至用户队列的Block最终也会通过全局队列进入相同的工作线程池(除非你的用户队列的目标是主线程,但是为了提高运行速度,我们绝不会这么干)。转载 2013-10-14 17:11:28 · 493 阅读 · 0 评论 -
GCD实战一:使用串行队列实现简单的预加载
其主要思路是使用gcd创建串行队列,然后在此队列中先后执行两个任务:1.预加载一个viewController 2.将这个viewController推入代码如下:@implementation DWAppDelegate{ dispatch_queue_t _serialQueue; UINavigationController *_navController;}转载 2013-10-14 17:15:59 · 491 阅读 · 0 评论 -
iOS多线程编程指南(附录)
本附录描述了Mac OS X和iOS上面一些关键的高级线程安全的框架。本附录的信息有可能会发生改变。Cocoa在Cocoa上面使用多线程的指南包括以下这些:不可改变的对象一般是线程安全的。一旦你创建了它们,你可以把这些对象在线程间安全的传递。另一方面,可变对象通常不是线程安全的。为了在多线程应用里面使用可变对象,应用必须适当的同步。关于更多信息,参阅”可变和不可变对比”。许多对象在转载 2013-10-14 17:34:40 · 559 阅读 · 0 评论 -
iOS多线程编程指南(三)Run Loop
Run LoopsRun loops是线程相关的的基础框架的一部分。一个run loop就是一个事件处理的循环,用来不停的调度工作以及处理输入事件。使用run loop的目的是让你的线程在有工作的时候忙于工作,而没工作的时候处于休眠状态。Run loop的管理并不完全自动的。你仍然需要设计你的线程代码在合适的时候启动run loop并正确响应输入事件。Cocoa和Core Fundatio转载 2013-10-14 17:22:31 · 641 阅读 · 0 评论 -
Block介绍(二)内存管理与其他特性
我们在前一章介绍了block的用法,而正确使用block必须要求正确理解block的内存管理问题。这一章,我们只陈述结果而不追寻原因,我们将在下一章深入其原因。一、block放在哪里我们针对不同情况来讨论block的存放位置:1.栈和堆以下情况中的block位于堆中:1234567891011121转载 2013-10-14 17:50:24 · 585 阅读 · 0 评论 -
Block介绍(一)基础
一、概述Block是C级别的语法和运行时特性。Block比较类似C函数,但是Block比之C函数,其灵活性体现在栈内存、堆内存的引用,我们甚至可以将一个Block作为参数传给其他的函数或者Block。 二、热身先看一个比较简单的Block例子:int multiplier = 7;int (^myBlock)(int) = ^(int num) { return nu转载 2013-10-14 17:43:17 · 529 阅读 · 0 评论 -
GCD实战2:资源竞争
概述我将分四步来带大家研究研究程序的并发计算。第一步是基本的串行程序,然后使用GCD把它并行计算化。如果你想顺着步骤来尝试这些程序的话,可以下载源码。注意,别运行imagegcd2.m,这是个反面教材。。 原始程序我们的程序只是简单地遍历~/Pictures然后生成缩略图。这个程序是个命令行程序,没有图形界面(尽管是使用Cocoa开发库的),主函数如下: in转载 2013-10-14 17:17:06 · 659 阅读 · 0 评论 -
GCD介绍(一): 基本概念和Dispatch Queue
什么是GCD?Grand Central Dispatch或者GCD,是一套低层API,提供了一种新的方法来进行并发程序编写。从基本功能上讲,GCD有点像NSOperationQueue,他们都允许程序将任务切分为多个单一任务然后提交至工作队列来并发地或者串行地执行。GCD比之NSOpertionQueue更底层更高效,并且它不是Cocoa框架的一部分。除了代码的平行执行能力,GCD还提供转载 2013-10-14 17:09:14 · 555 阅读 · 0 评论 -
iOS多线程编程指南(一)关于多线程编程
第一章 关于多线程编程多年来,计算机的最大性能主要受限于它的中心微处理器的速度。然而由于个别处理器已经开始达到它的瓶颈限制,芯片制造商开始转向多核设计,让计算机具有了同时执行多个任务的能力。尽管Mac OS X利用了这些核心优势,在任何时候可以执行系统相关的任务,但自己的应用程序也可以通过多线程方法利用这些优势。1.1 什么是多线程多线程是一个比较轻量级的方法来转载 2013-10-14 17:19:36 · 738 阅读 · 0 评论 -
block介绍(四)揭开神秘面纱(下)
内存管理的真面目 objc层面如何区分不同内存区的blockBlock_private.h中有这样一组值:/* the raw data space for runtime classes for blocks *//* class+meta used for stack, malloc, and collectable based blocks */BLOCK_E转载 2013-10-15 08:42:54 · 762 阅读 · 0 评论 -
GCD介绍(三): Dispatch Sources
何为Dispatch Sources简单来说,dispatch source是一个监视某些类型事件的对象。当这些事件发生时,它自动将一个block放入一个dispatch queue的执行例程中。说的貌似有点不清不楚。我们到底讨论哪些事件类型?下面是GCD 10.6.0版本支持的事件:Mach port send right state changes.Mach port re转载 2013-10-14 17:13:00 · 487 阅读 · 0 评论 -
iOS多线程编程指南(二)线程管理
线程管理Mac OS X和iOS里面的每个进程都是有一个或多个线程构成,每个线程都代表一个代码的执行路径。每个应用程序启动时候都是一个线程,它执行程序的main函数。应用程序可以生成额外的线程,其中每个线程执行一个特定功能的代码。当应用程序生成一个新的线程的时候,该线程变成应用程序进程空间内的一个实体。每个线程都拥有它自己的执行堆栈,由内核调度独立的运行时间片。一个线程可以和其他线程或其他转载 2013-10-14 17:21:14 · 625 阅读 · 0 评论 -
iOS多线程
IOS多线程ios有三种主要方法:1、NSThread。2、NSOperation。3、GCD。 1、 NSThread:调用方法如下:如果需要函数参数的话,可以通过Object传递。1.1:[NSThread detachNewThreadSelector:@selector(threadInMainMethod:) toTarget:self with原创 2013-10-12 11:00:35 · 586 阅读 · 0 评论 -
iOS多线程编程指南(四)线程同步
第四章 线程同步应用程序里面多个线程的存在引发了多个执行线程安全访问资源的潜在问题。两个线程同时修改同一资源有可能以意想不到的方式互相干扰。比如,一个线程可能覆盖其他线程改动的地方,或让应用程序进入一个未知的潜在无效状态。如果你幸运的话,受损的资源可能会导致明显的性能问题或崩溃,这样比较容易跟踪并修复它。然而如果你不走运,资源受损可能导致微妙的错误,这些错误不会立即显现出来,而是很久转载 2013-10-14 17:32:53 · 827 阅读 · 0 评论