![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
iOS开发-多线程篇
浩羽科技
生命不息,运动不止。
展开
-
iOS开发多线程篇—创建线程
iOS开发多线程篇—创建线程一、创建和启动线程简单说明一个NSThread对象就代表一条线程创建、启动线程(1) NSThread *thread = [[NSThread alloc] initWithTarget:self selector:@selector(run) object:nil];[thread start];// 线程一启动,就会在线程thread中翻译 2015-06-05 16:30:35 · 341 阅读 · 0 评论 -
GCD入门(一): 基本概念和Dispatch Queue
什么是GCD?Grand Central Dispatch或者GCD,是一套低层API,提供了一种新的方法来进行并发程序编写。从基本功能上讲,GCD有点像NSOperationQueue,他们都允许程序将任务切分为多个单一任务然后提交至工作队列来并发地或者串行地执行。GCD比之NSOpertionQueue更底层更高效,并且它不是Cocoa框架的一部分。除了代码的平行执行能力,GC翻译 2015-07-15 10:18:22 · 280 阅读 · 0 评论 -
iOS多线程编程指南(附录)
本附录描述了Mac OS X和iOS上面一些关键的高级线程安全的框架。本附录的信息有可能会发生改变。Cocoa在Cocoa上面使用多线程的指南包括以下这些:不可改变的对象一般是线程安全的。一旦你创建了它们,你可以把这些对象在线程间安全的传递。另一方面,可变对象通常不是线程安全的。为了在多线程应用里面使用可变对象,应用必须适当的同步。关于更多信息,参阅”可变和不可变对比”翻译 2015-07-15 11:05:01 · 312 阅读 · 0 评论 -
GCD入门(二): 多核心的性能
概念为了在单一进程中充分发挥多核的优势,我们有必要使用多线程技术(我们没必要去提多进程,这玩意儿和GCD没关系)。在低层,GCD全局dispatch queue仅仅是工作线程池的抽象。这些队列中的Block一旦可用,就会被dispatch到工作线程中。提交至用户队列的Block最终也会通过全局队列进入相同的工作线程池(除非你的用户队列的目标是主线程,但是为了提高运行速度,我们绝不会这么干)翻译 2015-07-15 10:21:51 · 311 阅读 · 0 评论 -
GCD外传:dispatch_once(上)
相信大家对dispatch_once都不陌生了,这一篇我将和大家一起探究dispatch_once的更多细节。dispatch_once的作用正如其名:对于某个任务执行一次,且只执行一次。 dispatch_once函数有两个参数,第一个参数predicate用来保证执行一次,第二个参数是要执行一次的任务block。1234翻译 2015-07-15 10:30:44 · 541 阅读 · 0 评论 -
GCD入门(三): Dispatch Sources
何为Dispatch Sources简单来说,dispatch source是一个监视某些类型事件的对象。当这些事件发生时,它自动将一个block放入一个dispatch queue的执行例程中。说的貌似有点不清不楚。我们到底讨论哪些事件类型?下面是GCD 10.6.0版本支持的事件:Mach port send right state changes.Ma翻译 2015-07-15 10:22:52 · 217 阅读 · 0 评论 -
iOS多线程编程指南-目录
什么是多线程1.2 线程术语1.3 多线程的替代方法1.4 线程支持1.5 设计技巧第二章 线程管理2.1 线程成本2.2 创建一个线程2.3 配置线程属性2.4 编写你线程的主翻译 2015-07-15 10:56:28 · 228 阅读 · 0 评论 -
iOS多线程编程指南(二)线程管理
线程管理Mac OS X和iOS里面的每个进程都是有一个或多个线程构成,每个线程都代表一个代码的执行路径。每个应用程序启动时候都是一个线程,它执行程序的main函数。应用程序可以生成额外的线程,其中每个线程执行一个特定功能的代码。当应用程序生成一个新的线程的时候,该线程变成应用程序进程空间内的一个实体。每个线程都拥有它自己的执行堆栈,由内核调度独立的运行时间片。一个线程可以和其他线翻译 2015-07-15 10:58:24 · 516 阅读 · 0 评论 -
iOS多线程编程指南(三)Run Loop
Run LoopsRun loops是线程相关的的基础框架的一部分。一个run loop就是一个事件处理的循环,用来不停的调度工作以及处理输入事件。使用run loop的目的是让你的线程在有工作的时候忙于工作,而没工作的时候处于休眠状态。Run loop的管理并不完全自动的。你仍然需要设计你的线程代码在合适的时候启动run loop并正确响应输入事件。Cocoa和Core Fund翻译 2015-07-15 11:00:01 · 267 阅读 · 0 评论 -
GCD(Grand Central Dispatch)教程
Grand Central Dispatch或者GCD,是一套low level API,提供了一种新的方法来进行并发程序编写。从基本功能上讲,GCD有点像NSOperationQueue,他们都允许程序将任务切分为多个单一任务然后提交至工作队列来并发地或者串行地执行。GCD比之NSOpertionQueue更底层更高效,并且它不是Cocoa框架的一部分。在cocoa开发中,GCD与B翻译 2015-07-15 10:16:10 · 293 阅读 · 0 评论 -
NSRunLoop 概述和原理
1.什么是NSRunLoop?我们会经常看到这样的代码:- (IBAction)start:(id)sender{pageStillLoading = YES;[NSThread detachNewThreadSelector:@selector(loadPageInBackground:)toTarget:self withObject:nil];翻译 2015-08-10 17:32:06 · 316 阅读 · 0 评论 -
关于iOS多线程,你看我就够了(CocoaChina)
在这篇文章中,我将为你整理一下 iOS 开发中几种多线程方案,以及其使用方法和注意事项。当然也会给出几种多线程的案例,在实际使用中感受它们的区别。还有一点需要说明的是,这篇文章将会使用 Swift 和 Objective-c 两种语言讲解,双语幼儿园。OK,let't begin!概述这篇文章中,我不会说多线程是什么、线程和进程的区别、多线程有什么用,当然我也不会说什么是串行、什么转载 2015-08-04 16:04:50 · 802 阅读 · 0 评论 -
iOS多线程编程指南(四)线程同步
第四章 线程同步应用程序里面多个线程的存在引发了多个执行线程安全访问资源的潜在问题。两个线程同时修改同一资源有可能以意想不到的方式互相干扰。比如,一个线程可能覆盖其他线程改动的地方,或让应用程序进入一个未知的潜在无效状态。如果你幸运的话,受损的资源可能会导致明显的性能问题或崩溃,这样比较容易跟踪并修复它。然而如果你不走运,资源受损可能导致微妙的错误,这些错误不会立即显现出来,而是翻译 2015-07-15 11:01:38 · 421 阅读 · 0 评论 -
iOS多线程编程指南(一)关于多线程编程
第一章 关于多线程编程多年来,计算机的最大性能主要受限于它的中心微处理器的速度。然而由于个别处理器已经开始达到它的瓶颈限制,芯片制造商开始转向多核设计,让计算机具有了同时执行多个任务的能力。尽管Mac OS X利用了这些核心优势,在任何时候可以执行系统相关的任务,但自己的应用程序也可以通过多线程方法利用这些优势。1.1 什么是多线程多线程是一个比较轻翻译 2015-07-15 10:57:14 · 346 阅读 · 0 评论 -
iOS开发多线程篇—线程安全
iOS开发多线程篇—线程安全 一、多线程的安全隐患资源共享1块资源可能会被多个线程共享,也就是多个线程可能会访问同一块资源比如多个线程访问同一个对象、同一个变量、同一个文件当多个线程访问同一块资源时,很容易引发数据错乱和数据安全问题示例一:示例二:问题代码: 1 // 2 // YYViewCo翻译 2015-06-05 16:36:40 · 479 阅读 · 0 评论 -
iOS开发多线程篇—线程的状态
iOS开发多线程篇—线程的状态一、简单介绍线程的创建: self.thread=[[NSThread alloc]initWithTarget:self selector:@selector(test) object:nil];说明:创建线程有多种方式,这里不做过多的介绍。 线程的开启:[self.thread start];线程的运行和阻塞:(1)设置翻译 2015-06-05 16:42:47 · 318 阅读 · 0 评论 -
iOS开发多线程篇—GCD的基本使用
iOS开发多线程篇—GCD的基本使用一、主队列介绍主队列:是和主线程相关联的队列,主队列是GCD自带的一种特殊的串行队列,放在主队列中得任务,都会放到主线程中执行。提示:如果把任务放到主队列中进行处理,那么不论处理函数是异步的还是同步的都不会开启新的线程。获取主队列的方式: dispatch_queue_t queue=dispatch_get_main_q翻译 2015-06-05 16:43:35 · 372 阅读 · 0 评论 -
iOS开发多线程篇—GCD的常见用法
iOS开发多线程篇—GCD的常见用法一、延迟执行1.介绍iOS常见的延时执行有2种方式(1)调用NSObject的方法[self performSelector:@selector(run) withObject:nil afterDelay:2.0];// 2秒后再调用self的run方法 (2)使用GCD函数dispatch_after(dispatch翻译 2015-06-05 16:47:40 · 327 阅读 · 0 评论 -
iOS开发多线程篇—NSOperation简单介绍
iOS开发多线程篇—NSOperation简单介绍一、NSOperation简介1.简单说明NSOperation的作⽤:配合使用NSOperation和NSOperationQueue也能实现多线程编程NSOperation和NSOperationQueue实现多线程的具体步骤:(1)先将需要执行的操作封装到一个NSOperation对象中(2)然后将NSOperatio翻译 2015-06-05 16:48:28 · 381 阅读 · 0 评论 -
iOS开发多线程篇—NSOperation基本操作
iOS开发多线程篇—NSOperation基本操作一、并发数(1)并发数:同时执⾏行的任务数.比如,同时开3个线程执行3个任务,并发数就是3(2)最大并发数:同一时间最多只能执行的任务的个数。(3)最⼤大并发数的相关⽅方法- (NSInteger)maxConcurrentOperationCount;- (void)setMaxConcurrentOp翻译 2015-06-05 16:49:43 · 369 阅读 · 0 评论 -
iOS开发多线程篇—自定义NSOperation
iOS开发多线程篇—自定义NSOperation一、实现一个简单的tableView显示效果实现效果展示: 代码示例(使用以前在主控制器中进行业务处理的方式)1.新建一个项目,让控制器继承自UITableViewController。 1 // 2 // YYViewController.h 3 // 01-自定义Operation 4 // 5 /翻译 2015-06-05 16:52:32 · 368 阅读 · 0 评论 -
iOS开发多线程篇—多线程简单介绍
iOS开发多线程篇—多线程简单介绍 一、进程和线程1.什么是进程 进程是指在系统中正在运行的一个应用程序每个进程之间是独立的,每个进程均运行在其专用且受保护的内存空间内 比如同时打开QQ、Xcode,系统就会分别启动2个进程通过“活动监视器”可以查看Mac系统中所开启的进程 2.什么是线程翻译 2015-06-05 16:23:17 · 772 阅读 · 0 评论 -
iOS开发多线程篇—GCD介绍
iOS开发多线程篇—GCD介绍一、简单介绍1.什么是GCD?全称是Grand Central Dispatch,可译为“牛逼的中枢调度器”纯C语言,提供了非常多强大的函数 2.GCD的优势GCD是苹果公司为多核的并行运算提出的解决方案GCD会自动利用更多的CPU内核(比如双核、四核)GCD会自动管理线程的生命周期(创建线程、调翻译 2015-06-05 16:40:42 · 411 阅读 · 0 评论 -
iOS开发多线程篇—线程间的通信
iOS开发多线程篇—线程间的通信 一、简单说明线程间通信:在1个进程中,线程往往不是孤立存在的,多个线程之间需要经常进行通信 线程间通信的体现1个线程传递数据给另1个线程在1个线程中执行完特定任务后,转到另1个线程继续执行任务 线程间通信常用方法- (void)performSelectorOnMainThread:(翻译 2015-06-05 16:39:17 · 422 阅读 · 0 评论 -
GCD入门(四): 完结
Dispatch Queue挂起dispatch queue可以被挂起和恢复。使用 dispatch_suspend函数来挂起,使用 dispatch_resume 函数来恢复。这两个函数的行为是如你所愿的。另外,这两个函数也可以用于dispatch source。一个要注意的地方是,dispatch queue的挂起是block粒度的。换句话说,挂起一个queue并不会翻译 2015-07-15 10:28:48 · 379 阅读 · 0 评论 -
iOS网络编程之AFNetworking使用
iOS网络编程之AFNetworking使用现在大家都喜欢用AFNetworking,因为有人维护。看来一下官方文档,把使用的代码简单罗列一下:首先通过CocoaPods(没用过的看这篇文章)把AFNetworking拉下来Podfileplatform :ios, '7.0'pod "AFNetworking", "~> 2.0"方法一:GET 请求A翻译 2015-07-14 10:55:25 · 268 阅读 · 0 评论