`
chriszeng87
  • 浏览: 738542 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

NSThread和dispatch_async用法和区别

    博客分类:
  • iOS
 
阅读更多
//启动线程 
//    [NSThread detachNewThreadSelector:@selector(downloadImage:) toTarget:self withObject:ImageURL]; 
     
    dispatch_queue_t newThread = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); 
    dispatch_async(newThread, ^{ 
        [self downloadImage:ImageURL]; 
    }); 
 

1、你使用global队列可能会导致分派时间过长。由于global队列中可能会含有较多的系统队列。 
2、dispatch_async调度本身是有开销的,因此你把[activity startAnimating];放在最上面是不妥的。最好的方式是用一个标志,等待download这个函数所处的核被激活后调。 
3、NSThread的方式或许能做更快的切换,因为ARMv6或更高版本的处理器都提供了非常强大的线程切换机制。但是NSThread不会采取多核的分派,因为这个系统接口首先要保证的是用户线程的可靠性。 
而Grand Central Dispatch显式地利用分派队列来做多核分派调度,因此如果是在多核处理器上的话用G_C_D更快。 
如果你的处理器是单核心的话,那么可以使用切换更快的NSThread。

 

 

转自:http://blog.sina.com.cn/s/blog_5102c03601011zdr.html

分享到:
评论

相关推荐

    线程同步dispatch_barrier_(a)sync1

    总结来说,`dispatch_barrier_async` 和 `dispatch_barrier_sync` 提供了一种高效的方法来同步并发队列中的任务,确保特定任务在其他所有任务执行完毕后再执行。这在处理数据库操作、共享资源的更新或其他需要顺序...

    ios demo,主队列,异步调度,手动创建线程,detachNewThreadSelector dispatch_get_main_queue

    例如,当你需要更新UI或执行其他需要与主线程同步的操作时,可以使用`dispatch_async(dispatch_get_main_queue(), ^{ ... })`来异步地将任务添加到主队列。 在实际开发中,结合使用这些方法可以使代码更加灵活和...

    NSThread GCD

    在“NSThreadAndBlockDemo”这个压缩包中,应该包含了使用NSThread和GCD的示例代码,可以帮助初学者更直观地理解这两种多线程技术的用法。通过学习和实践这些代码,可以加深对多线程编程的理解,提升开发技能。

    图片库上传

    上传使用方法: NSData *data = UIImageJPEGRepresentation(image, 0.3); dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), ^{ // [NSThread sleepForTimeInterval:1]; ...

    iOS 多线程总结之GCD的使用详解

    - 使用dispatch_async异步执行任务。 示例代码如下: ```c // 同步执行任务 dispatch_sync(serialQueue, ^{ // 这里放任务代码 }); // 异步执行任务 dispatch_async(concurrentQueue, ^{ // 这里放任务代码 }); ...

    iOS多线程编程

    本文将深入探讨iOS中的多线程编程,包括GCD(Grand Central Dispatch)、NSOperation、NSThread的使用,以及异步和同步下载、Block的运用,以及ASIHttpRequest类库的使用。 首先,GCD是Apple推出的一种多线程解决...

    IOS应用源码——多线程.zip

    源码可能使用dispatch_async向主线程发送任务,或者使用NSOperationQueue的addOperationWithBlock方法,确保在主线程执行。 6. 资源释放:在多线程环境下,要注意及时释放不再使用的资源,避免内存泄漏。例如,当...

    NSThreadAndBlockDemo

    总的来说,`NSThreadAndBlockDemo`项目旨在帮助开发者理解如何使用`NSThread`和`Block`来实现多线程编程,通过实践这些技术,可以提升应用的并发能力,避免阻塞主线程,提供更优秀的用户体验。同时,了解这些基础...

    io后台运行demo

    dispatch_async(dispatch_get_main_queue(), ^(void) { if([self running]) [self stopAudio]; while([self running]) { [NSThread sleepForTimeInterval:10]; //wait for finish } [self playAudio]; }...

    IOS应用源码之多线程编程.zip

    三、GCD使用方法 1. 创建队列: - 串行队列:`dispatch_queue_create("queueName", DISPATCH_QUEUE_SERIAL)` - 并行队列:`dispatch_queue_create("queueName", DISPATCH_QUEUE_CONCURRENT)` 2. 将任务添加到队列...

    iOS中多线程原理与runloop介绍

    在iOS中,常见的线程间通信机制包括使用`NSNotification`、`NSLock`、`@synchronized`关键字以及`dispatch_sync`和`dispatch_barrier_async`等GCD函数。 - **NSNotification**:适用于跨线程发布通知,但不保证顺序...

    iOS进阶1

    - 指纹识别:使用`LocalAuthentication`框架,`LAContext`的`canEvaluatePolicy`和`evaluatePolicy`方法进行生物识别验证。 7. **文件操作**: - 解压缩:SSZipArchive库可用于ZIP文件的解压缩。 - `...

    ThreadTest.zip

    2. 使用`dispatch_async`或`dispatch_sync`提交任务到队列,如`dispatch_async(queue, ^{ /* 任务代码 */ });` 3. GCD会自动将任务分发到适当的线程执行。 GCD的优势在于其高效和简洁,它简化了线程管理,同时提供...

    NSThread多线程

    这篇教程将深入探讨NSThread的使用方法,以及它在iOS开发中的应用。 首先,我们要理解什么是线程。线程是操作系统分配CPU时间的基本单位,一个进程可以有多个线程,每个线程执行不同的任务。在iOS中,主线程主要...

    初尝多线程

    例如,可能包含了创建和启动NSThread的代码,或者展示了如何使用GCD的dispatch_queue_t和dispatch_block_t来实现异步任务。也可能包含了NSOperationQueue的使用,以及如何添加NSOperation实例以实现并发执行。 理解...

    iOS 常驻线程开启方式

    - 将任务添加到队列中,使用`dispatch_async()`,队列会根据需要调度线程执行任务。 然而,需要注意的是,iOS设备资源有限,过度使用常驻线程可能导致性能问题和电池消耗。因此,在实际应用中,通常建议使用GCD的...

    变block成同步执行

    在实际项目中,合理选择异步和同步Block的使用,结合任务的性质和上下文,是优化iOS应用性能的关键。 总之,将iOS中的Block从异步转换为同步,可以使用GCD的`dispatch_sync`函数。理解Block的执行方式以及何时、...

    NSThread下载图片

    需要注意的是,虽然`NSThread`提供了一种简单的多线程实现方式,但在实际开发中,由于其管理和调度的复杂性,我们往往更倾向于使用GCD(Grand Central Dispatch)或者NSOperationQueue,它们提供了更为高效和简洁的...

    多线程学习笔记

    GCD中执行任务的两个常用函数是dispatch_sync和dispatch_async。dispatch_sync函数用于同步执行任务,它将任务同步地加入到指定的队列中,并在当前线程中顺序执行。而dispatch_async函数则用于异步执行任务,它将...

    ios 多线程下载图片并显示

    本文将深入探讨如何使用ASIHttpRequest库和自定义线程类来实现图片的多线程下载和显示。 首先,让我们了解什么是多线程。在iOS应用中,主线程主要负责用户界面的更新和事件响应,而其他线程则可以用于执行后台任务...

Global site tag (gtag.js) - Google Analytics