//启动线程
// [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];
});
// [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_async` 和 `dispatch_barrier_sync` 提供了一种高效的方法来同步并发队列中的任务,确保特定任务在其他所有任务执行完毕后再执行。这在处理数据库操作、共享资源的更新或其他需要顺序...
例如,当你需要更新UI或执行其他需要与主线程同步的操作时,可以使用`dispatch_async(dispatch_get_main_queue(), ^{ ... })`来异步地将任务添加到主队列。 在实际开发中,结合使用这些方法可以使代码更加灵活和...
在“NSThreadAndBlockDemo”这个压缩包中,应该包含了使用NSThread和GCD的示例代码,可以帮助初学者更直观地理解这两种多线程技术的用法。通过学习和实践这些代码,可以加深对多线程编程的理解,提升开发技能。
上传使用方法: NSData *data = UIImageJPEGRepresentation(image, 0.3); dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), ^{ // [NSThread sleepForTimeInterval:1]; ...
- 使用dispatch_async异步执行任务。 示例代码如下: ```c // 同步执行任务 dispatch_sync(serialQueue, ^{ // 这里放任务代码 }); // 异步执行任务 dispatch_async(concurrentQueue, ^{ // 这里放任务代码 }); ...
本文将深入探讨iOS中的多线程编程,包括GCD(Grand Central Dispatch)、NSOperation、NSThread的使用,以及异步和同步下载、Block的运用,以及ASIHttpRequest类库的使用。 首先,GCD是Apple推出的一种多线程解决...
源码可能使用dispatch_async向主线程发送任务,或者使用NSOperationQueue的addOperationWithBlock方法,确保在主线程执行。 6. 资源释放:在多线程环境下,要注意及时释放不再使用的资源,避免内存泄漏。例如,当...
总的来说,`NSThreadAndBlockDemo`项目旨在帮助开发者理解如何使用`NSThread`和`Block`来实现多线程编程,通过实践这些技术,可以提升应用的并发能力,避免阻塞主线程,提供更优秀的用户体验。同时,了解这些基础...
dispatch_async(dispatch_get_main_queue(), ^(void) { if([self running]) [self stopAudio]; while([self running]) { [NSThread sleepForTimeInterval:10]; //wait for finish } [self playAudio]; }...
三、GCD使用方法 1. 创建队列: - 串行队列:`dispatch_queue_create("queueName", DISPATCH_QUEUE_SERIAL)` - 并行队列:`dispatch_queue_create("queueName", DISPATCH_QUEUE_CONCURRENT)` 2. 将任务添加到队列...
在iOS中,常见的线程间通信机制包括使用`NSNotification`、`NSLock`、`@synchronized`关键字以及`dispatch_sync`和`dispatch_barrier_async`等GCD函数。 - **NSNotification**:适用于跨线程发布通知,但不保证顺序...
- 指纹识别:使用`LocalAuthentication`框架,`LAContext`的`canEvaluatePolicy`和`evaluatePolicy`方法进行生物识别验证。 7. **文件操作**: - 解压缩:SSZipArchive库可用于ZIP文件的解压缩。 - `...
2. 使用`dispatch_async`或`dispatch_sync`提交任务到队列,如`dispatch_async(queue, ^{ /* 任务代码 */ });` 3. GCD会自动将任务分发到适当的线程执行。 GCD的优势在于其高效和简洁,它简化了线程管理,同时提供...
这篇教程将深入探讨NSThread的使用方法,以及它在iOS开发中的应用。 首先,我们要理解什么是线程。线程是操作系统分配CPU时间的基本单位,一个进程可以有多个线程,每个线程执行不同的任务。在iOS中,主线程主要...
例如,可能包含了创建和启动NSThread的代码,或者展示了如何使用GCD的dispatch_queue_t和dispatch_block_t来实现异步任务。也可能包含了NSOperationQueue的使用,以及如何添加NSOperation实例以实现并发执行。 理解...
- 将任务添加到队列中,使用`dispatch_async()`,队列会根据需要调度线程执行任务。 然而,需要注意的是,iOS设备资源有限,过度使用常驻线程可能导致性能问题和电池消耗。因此,在实际应用中,通常建议使用GCD的...
在实际项目中,合理选择异步和同步Block的使用,结合任务的性质和上下文,是优化iOS应用性能的关键。 总之,将iOS中的Block从异步转换为同步,可以使用GCD的`dispatch_sync`函数。理解Block的执行方式以及何时、...
需要注意的是,虽然`NSThread`提供了一种简单的多线程实现方式,但在实际开发中,由于其管理和调度的复杂性,我们往往更倾向于使用GCD(Grand Central Dispatch)或者NSOperationQueue,它们提供了更为高效和简洁的...
GCD中执行任务的两个常用函数是dispatch_sync和dispatch_async。dispatch_sync函数用于同步执行任务,它将任务同步地加入到指定的队列中,并在当前线程中顺序执行。而dispatch_async函数则用于异步执行任务,它将...
本文将深入探讨如何使用ASIHttpRequest库和自定义线程类来实现图片的多线程下载和显示。 首先,让我们了解什么是多线程。在iOS应用中,主线程主要负责用户界面的更新和事件响应,而其他线程则可以用于执行后台任务...