NSThread和dispatch_async用法和区别
来源:互联网 发布:淘宝上的优衣库代购 编辑:程序博客网 时间:2024/05/22 14:50
//启动线程 [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]; });
2、dispatch_async调度本身是有开销的,因此你把[activity startAnimating];放在最上面是不妥的。最好的方式是用一个标志,等待download这个函数所处的核被激活后调。
3、NSThread的方式或许能做更快的切换,因为ARMv6或更高版本的处理器都提供了非常强大的线程切换机制。但是NSThread不会采取多核的分派,因为这个系统接口首先要保证的是用户线程的可靠性。
而Grand Central Dispatch显式地利用分派队列来做多核分派调度,因此如果是在多核处理器上的话用G_C_D更快。
如果你的处理器是单核心的话,那么可以使用切换更快的NSThread。
-(void)GetdataAndReloadData:(int) CurrentPageIndex{ dispatch_queue_t queue=dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); dispatch_async(queue, ^(void){ //如果用dispatch_sync的话不能看到点击后cell.textlabel.text变成(正在加载。。。。) [JsonParse GetModelList:CurrentPageIndex OnFinsh:^(NSMutableArray *dic) { SubjectModelList=dic; dic=nil; dispatch_queue_t main=dispatch_get_main_queue(); dispatch_async(main, ^(void){ [_SubjectList reloadData]; [_SubjectList scrollToRowAtIndexPath:[NSIndexPath indexPathForRow:1 inSection:0] atScrollPosition:UITableViewScrollPositionTop animated:NO]; }); }]; });}//delegate - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{ if (indexPath.row==0) { if(PageIndex==1)//第一页无法加载上一页 return; UITableViewCell *cell=[_SubjectList cellForRowAtIndexPath:indexPath]; cell.textLabel.text=@"正在加载..."; [self GetdataAndReloadData:--PageIndex]; return; } if(indexPath.row==SubjectModelList.count+1) { UITableViewCell *cell=[_SubjectList cellForRowAtIndexPath:indexPath]; cell.textLabel.text=@"正在加载..."; [self GetdataAndReloadData:++PageIndex]; return; } ContentViewController *content=[[ContentViewController alloc] init:[SubjectModelList objectAtIndex:indexPath.row-1] ]; [self.navigationController pushViewController:content animated:YES]; content=nil; }async是异步执行,sync是同步执行
- NSThread和dispatch_async用法和区别
- NSThread和dispatch_async用法和区别
- NSThread和dispatch_async用法和区别
- NSThread和dispatch_async用法和区别
- NSThread和dispatch_async用法和区别
- dispatch_async用法和区别
- dispatch_async 和 dispatch_sync 的区别
- dispatch_sync和dispatch_async的区别
- GCD dispatch_sync和dispatch_async
- dispatch_async和performSelector
- dispatch_sync和dispatch_async
- dispatch_async 和dispatch_sync GCD
- dispatch_async和dispatch_sync在dispatch_get_main_queue上的区别
- GCD编程dispatch_sync(同步)和dispatch_async(异步)方式执行并发队列任务区别
- GCD学习(六) dispatch_async 和dispatch_sync
- GCD学习(六) dispatch_async 和dispatch_sync
- NSTimer、 NSTask、 NSThread 和 NSRunloop 之间的区别:
- NSTimer、 NSTask、 NSThread 和 NSRunloop 之间的区别
- [google面试CTCI] 2-2 找出链表的倒数第n个节点元素
- struts2.xml 中result type属性说明
- OpenJDK源码研究笔记(四)-编写和组织可复用的工具类和方法
- [google面试CTCI] 2-3 只给定链表中间节点指针,如何删除中间节点?
- VC++6.0 程序使用XP风格样式
- NSThread和dispatch_async用法和区别
- Ubuntu及其衍生发行版硬盘安装方法(grub2)
- vs2010 操作
- 图片查看器
- window 开始运行指令(方便使用而已)
- 1-15 实验12 ZigBee无线传感器网络远程数据采集系统
- 监听树的选择事件
- 二叉树树的先序遍历,中序遍历和后序遍历
- JAVA 对象引用,以及对象赋值