zoukankan      html  css  js  c++  java
  • 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:

     

    [objc] view plain copy
     
     在CODE上查看代码片派生到我的代码片
    1. //  
    2. //  YYViewController.m  
    3. //  06-NSThread04-线程间通信  
    4. //  
    5. //  Created by apple on 14-6-23.  
    6. //  Copyright (c) 2014年 itcase. All rights reserved.  
    7. //  
    8.   
    9. #import "YYViewController.h"  
    10. @interface YYViewController ()  
    11. @property (weak, nonatomic) IBOutlet UIImageView *iconView;  
    12. @end  
    13.   
    14. @implementation YYViewController  
    15.   
    16. - (void)viewDidLoad  
    17. {  
    18.     [super viewDidLoad];  
    19. }  
    20.   
    21. -(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event  
    22. {  
    23.   
    24. // 在子线程中调用download方法下载图片  
    25.     [self performSelectorInBackground:@selector(download) withObject:nil];  
    26. }  
    27.   
    28.    
    29.   
    30. -(void)download  
    31. {  
    32.     //1.根据URL下载图片  
    33.     //从网络中下载图片  
    34.     NSURL *urlstr=[NSURL URLWithString:@"fdsf"];  
    35.   
    36.     //把图片转换为二进制的数据  
    37.     NSData *data=[NSData dataWithContentsOfURL:urlstr];//这一行操作会比较耗时  
    38.   
    39.     //把数据转换成图片  
    40.     UIImage *image=[UIImage imageWithData:data];  
    41.    
    42.     //2.回到主线程中设置图片  
    43.     [self performSelectorOnMainThread:@selector(settingImage:) withObject:image waitUntilDone:NO];  
    44. }  
    45.   
    46.    
    47.   
    48. //设置显示图片  
    49. -(void)settingImage:(UIImage *)image  
    50. {  
    51.     self.iconView.image=image;  
    52. }  
    53.   
    54. @end  

    代码2:

     

    [objc] view plain copy
     
     在CODE上查看代码片派生到我的代码片
      1. //  
      2. //  YYViewController.m  
      3. //  06-NSThread04-线程间通信  
      4. //  
      5. //  Created by apple on 14-6-23.  
      6. //  Copyright (c) 2014年 itcase. All rights reserved.  
      7. //  
      8.   
      9. #import "YYViewController.h"  
      10. #import <NSData.h>  
      11.   
      12. @interface YYViewController ()  
      13. @property (weak, nonatomic) IBOutlet UIImageView *iconView;  
      14. @end  
      15.   
      16. @implementation YYViewController  
      17.   
      18. - (void)viewDidLoad  
      19. {  
      20.     [super viewDidLoad];  
      21. }  
      22.   
      23.    
      24. -(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event  
      25. {  
      26. // 在子线程中调用download方法下载图片  
      27.   
      28.     [self performSelectorInBackground:@selector(download) withObject:nil];  
      29. }  
      30.   
      31.    
      32. -(void)download  
      33. {  
      34.   
      35.     //1.根据URL下载图片  
      36.     //从网络中下载图片  
      37.     NSURL *urlstr=[NSURL URLWithString:@"fdsf"];  
      38.   
      39.     //把图片转换为二进制的数据  
      40.     NSData *data=[NSData dataWithContentsOfURL:urlstr];//这一行操作会比较耗时  
      41.   
      42.     //把数据转换成图片  
      43.     UIImage *image=[UIImage imageWithData:data];  
      44.   
      45.     //2.回到主线程中设置图片  
      46.     //第一种方式  
      47. //    [self performSelectorOnMainThread:@selector(settingImage:) withObject:image waitUntilDone:NO];  
      48.   
      49.     //第二种方式  
      50.     //    [self.imageView performSelector:@selector(setImage:) onThread:[NSThread mainThread] withObject:image waitUntilDone:NO];  
      51.   
      52.     //第三种方式  
      53.    [self.iconView performSelectorOnMainThread:@selector(setImage:) withObject:image waitUntilDone:NO];  
      54. }  
      55.   
      56.   
      57. //设置显示图片  
      58. //-(void)settingImage:(UIImage *)image  
      59. //{  
      60. //    self.iconView.image=image;  
      61. //}  
      62.   
      63. @end  
  • 相关阅读:
    Android成长之路-LayoutInflater和inflate的用法
    Android成长之路-实现简单动画
    Android成长之路-编码实现软件界面
    Android成长之路-手势库的创建
    Android成长之路-手势识别的实现
    Android编程获取网络连接状态(3G/Wifi)及调用网络配置界面
    android中文字中间有超链接的实现方法
    Arduino可穿戴教程ArduinoIDE新建编辑源文件
    FMDB使用SQLite事务Save Point
    FMDB使用Cached Statement功能
  • 原文地址:https://www.cnblogs.com/Ghosgt/p/5992401.html
Copyright © 2011-2022 走看看