iOS开发-在UITableViewController中使用GCD

在展现tableView之前,我们可能会做一些获取数据的操作(如下载图片等)。

如果该操作比较耗时,都放在主线程中(默认是在主线程中)执行,有可能暂时阻塞主线程,使界面出现卡顿现象,影响用户体验。

因此,这个问题可以用GCD来解决,将耗时的获取数据的操作放在全局队列中异步执行,例子如下:

  • - (void)viewDidLoad中有一个比较耗时的方法用来获取数据:
    - (void)viewDidLoad { [super viewDidLoad]; // 获得数据 [self getData]; }

  • -(void) getData中使用GCD:
    -(void)getData { __block __typeof(self)weakSelf = self; // 使用多线程来做获取数据的操作 dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^{ // 数据获取操作......

// 回到主线程更新UI,重新调用UITableView的reloadData方法(这一句很重要) dispatch_async(dispatch_get_main_queue(), ^{ [weakSelf.tableView reloadData]; }); }); }

关于reloadData的说明:

reloadData方法被调用之后,系统会重新访问数据源,重新给数据源和代理发送所有需要的消息,重新调用数据源和代理所有需要的方法,最主要的是- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {}方法,重新设置UITableViewCell。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • iOS开发系列--网络开发 概览 大部分应用程序都或多或少会牵扯到网络开发,例如说新浪微博、微信等,这些应用本身可...
    lichengjin阅读 9,119评论 2 7
  • __block和__weak修饰符的区别其实是挺明显的:1.__block不管是ARC还是MRC模式下都可以使用,...
    LZM轮回阅读 8,690评论 0 6
  • 史上最全的iOS面试题及答案 iOS面试小贴士———————————————回答好下面的足够了----------...
    Style_伟阅读 7,093评论 0 35
  • iOS面试小贴士 ———————————————回答好下面的足够了------------------------...
    不言不爱阅读 6,185评论 0 7
  • *面试心声:其实这些题本人都没怎么背,但是在上海 两周半 面了大约10家 收到差不多3个offer,总结起来就是把...
    Dove_iOS阅读 27,313评论 30 472