美文网首页
13.线程间通信

13.线程间通信

作者: 豆丶浆油条 | 来源:发表于2017-09-07 10:01 被阅读367次

    整个《面试题》都是对[2017年6月iOS招人心得(附面试题)]的整理

    1.线程间通信简介

      所谓线程间的通信,就是一个线程操作完数据之后,另一个线程再去操作这组数据。最常见的例子就是,子线程下载数据,主线程更新UI。其实线程间的通信是非常普遍的, 只要你的App进行了数据请求就一定会发生。至于很多iOS程序员没有发现,是因为几乎所有网络请求的框架的回调都是在主线程进行的,框架设计者都设计好了,所以你什么都不需要干。

    2.常见的通信方式

      1.GCD

        dispatch_async(dispatch_get_global_queue(0, 0), ^{
             //子线程请求数据
            dispatch_async(dispatch_get_main_queue(), ^{
    
                    //主线程更新UI
            });
    
        });
    

      2.NSObject

    - (void)performSelectorOnMainThread:(SEL)aSelector withObject:(nullable id)arg waitUntilDone:(BOOL)wait;
    
    
    - (void)performSelectorInBackground:(SEL)aSelector withObject:(nullable id)arg NS_AVAILABLE(10_5, 2_0);
    
    

      3.NSOperation

    [NSOperationQueue mainQueue] addOperationWithBlock:^{
            //更新UI
        }
    

    3.多线程同时操作一个数据

      春运的时候,就剩下一张票了,100个人同时购买,怎么办,难道每个人都能购买成功?肯定不是,只要一个人买了,其他人就不能买了,不然票的数量得出现负数。这就出现了强占资源,多条线程同时操作一个数据。iOS多线程之2.NSThread的加锁@synchronized。这篇文章给出了一种解决方式,其实还有很多,NSLock、信号量、NSConditionLock、barrier。其实实现得方向都是一致的,就是只要有一条线程操作这个数据,其他线程就不能操作了,等这个线程操作完了才能继续操作。

    相关文章

      网友评论

          本文标题:13.线程间通信

          本文链接:https://www.haomeiwen.com/subject/ewlvjxtx.html