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

    iOS开发多线程篇—线程间的通信

     

    一、简单说明

    线程间通信:在1个进程中,线程往往不是孤立存在的,多个线程之间需要经常进行通信

     

    线程间通信的体现

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

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

     

    线程间通信常用方法

    - (void)performSelectorOnMainThread:(SEL)aSelector withObject:(id)arg waitUntilDone:(BOOL)wait;

    - (void)performSelector:(SEL)aSelector onThread:(NSThread *)thr withObject:(id)arg waitUntilDone:(BOOL)wait;

     

    线程间通信示例 – 图片下载

    代码1:

    //
    //  YYViewController.m
    //  06-NSThread04-线程间通信
    //
    //  Created by apple on 14-6-23.
    //  Copyright (c) 2014年 itcase. All rights reserved.
    //
    
    #import "YYViewController.h"
    @interface YYViewController ()
    @property (weak, nonatomic) IBOutlet UIImageView *iconView;
    @end
    
    @implementation YYViewController
    
    - (void)viewDidLoad
    {
        [super viewDidLoad];
    }
    
    -(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
    {
    
    // 在子线程中调用download方法下载图片
        [self performSelectorInBackground:@selector(download) withObject:nil];
    }
    
     
    
    -(void)download
    {
        //1.根据URL下载图片
        //从网络中下载图片
        NSURL *urlstr=[NSURL URLWithString:@"fdsf"];
    
        //把图片转换为二进制的数据
        NSData *data=[NSData dataWithContentsOfURL:urlstr];//这一行操作会比较耗时
    
        //把数据转换成图片
        UIImage *image=[UIImage imageWithData:data];
     
        //2.回到主线程中设置图片
        [self performSelectorOnMainThread:@selector(settingImage:) withObject:image waitUntilDone:NO];
    }
    
     
    
    //设置显示图片
    -(void)settingImage:(UIImage *)image
    {
        self.iconView.image=image;
    }
    
    @end

    代码2:

    //
    //  YYViewController.m
    //  06-NSThread04-线程间通信
    //
    //  Created by apple on 14-6-23.
    //  Copyright (c) 2014年 itcase. All rights reserved.
    //
    
    #import "YYViewController.h"
    #import <NSData.h>
    
    @interface YYViewController ()
    @property (weak, nonatomic) IBOutlet UIImageView *iconView;
    @end
    
    @implementation YYViewController
    
    - (void)viewDidLoad
    {
        [super viewDidLoad];
    }
    
     
    -(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
    {
    // 在子线程中调用download方法下载图片
    
        [self performSelectorInBackground:@selector(download) withObject:nil];
    }
    
     
    -(void)download
    {
    
        //1.根据URL下载图片
        //从网络中下载图片
        NSURL *urlstr=[NSURL URLWithString:@"fdsf"];
    
        //把图片转换为二进制的数据
        NSData *data=[NSData dataWithContentsOfURL:urlstr];//这一行操作会比较耗时
    
        //把数据转换成图片
        UIImage *image=[UIImage imageWithData:data];
    
        //2.回到主线程中设置图片
        //第一种方式
    //    [self performSelectorOnMainThread:@selector(settingImage:) withObject:image waitUntilDone:NO];
    
        //第二种方式
        //    [self.imageView performSelector:@selector(setImage:) onThread:[NSThread mainThread] withObject:image waitUntilDone:NO];
    
        //第三种方式
       [self.iconView performSelectorOnMainThread:@selector(setImage:) withObject:image waitUntilDone:NO];
    }
    
    
    //设置显示图片
    //-(void)settingImage:(UIImage *)image
    //{
    //    self.iconView.image=image;
    //}
    
    @end
  • 相关阅读:
    Java基础知识强化之集合框架笔记20:数据结构之 栈 和 队列
    Java基础知识强化之集合框架笔记19:List集合迭代器使用之 并发修改异常的产生原因 以及 解决方案
    模块已加载,但对dllregisterServer的调用失败
    sql回滚
    BAT 批处理脚本 教程
    shell脚本小技巧
    shell if
    REDHAT4.8安装yum
    Linux中文显示乱码解决
    Nginx配置文件详细说明
  • 原文地址:https://www.cnblogs.com/yipingios/p/5563424.html
Copyright © 2011-2022 走看看