zoukankan      html  css  js  c++  java
  • iOS开发多线程篇—线程间的通信

    Cocoa为iOS线程间通信提供2种方式,1种是performSelector,另1种是Port。

      先说第1种,performSelector,有以下几种:

      

      第2种为NSMachPort方式。NSPort有3个子类,NSSocketPort、NSMessagePort、NSMachPort,但在iOS下只有NSMachPort可用。

         使用的方式为接收线程中注册NSMachPort,在另外的线程中使用此port发送消息,则被注册线程会收到相应消息,然后最终在主线程里调用某个回调函数。

         可以看到,使用NSMachPort的结果为调用了其它线程的1个函数,而这正是performSelector所做的事情,所以,NSMachPort是个鸡肋。线程间通信应该都通过performSelector来搞定。

    线程间通信的表现:

    1个线程传递数据给另1个线程

    在1个线程中执行完特定任务后,转到另1个线程继续执行任务

    下面是一个下载图片的例子:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    @interface BTThreadViewController ()
    {
        UIImageView *imagev;
    }
    @end
     
    - (void)viewDidLoad
    {
        [super viewDidLoad];
         
        imagev = [[UIImageView alloc] initWithFrame:CGRectMake(100, 100, 100, 100)];
        [self.view addSubview:imagev];
         
        //子线程里面调用downImage方法下载图片
        [self performSelectorInBackground:@selector(downImage) withObject:nil];
    }
     
    -(void)downImage
    {
        //从网络中下载图片
        NSURL *url = [NSURL URLWithString:@"http://i8.topit.me/8/c1/31/1142319854bdc31c18o.jpg"];
        //将图片转换为二进制数据
        NSData *imgData = [NSData dataWithContentsOfURL:url];
        //数据转换成图片
        UIImage *img = [UIImage imageWithData:imgData];
         
        //回到主线程设置图片
        [self performSelectorOnMainThread:@selector(senderImage:) withObject:img waitUntilDone:NO];
    }
     
    -(void)senderImage:(UIImage *)image
    {
        imagev.image = image;
    }

     

     
  • 相关阅读:
    Windows下Yarn安装与使用
    Node.js安装及环境配置之Windows篇
    sharding-jdbc—分片策略:Inline行表达式分片策略InlineShardingStrategy(2)
    sharding-jdbc—分片策略:标准分片策略StandardShardingStrategy(1)
    sharding-jdbc—分片策略(总)
    ShardingJdbc 数据脱敏
    ShardingJdbc 数据分布式事务
    Spring Boot整合Sharding-JDBC实现分库分表+读写分离org.apache.shardingsphere+mybatis-plus(4)
    jenkins docker
    nps 使用
  • 原文地址:https://www.cnblogs.com/iosblogx/p/4474489.html
Copyright © 2011-2022 走看看