• IPhone的多线程编程初体验


    IPhone的多线程编程初体验

    花了一天时间完成了IPhone下多线程的编程, 用到的类是UIKit的中NSThread.
    PS: 在google过程中,发现很多文都惊喜地标题着类似< 多线程的OS4来了>, 这些想正向引导一下, 0S4的亮点在于多任务,一个任务为一个进程,也叫多进程, 而多线程在早期的IPHONEOS上都是有的.
    IPHONE OS中任务的概念是一个应用, 在一个时间你只能做一件事情, 即不能同时玩游戏,同时上QQ. 而多任务的时候是可以这么做的.

    流程大概如下:
    1. 创建一个线程

    1. [NSThread detachNewThreadSelect:@selector(BeginThread)  
    2.   toTarget:selft  
    3.   withObject:nil];  

    2.线程里做两件,一件是后台处理耗时间的活(dosomethinglongtime),另一件是更新UI(UpdateUI)

    1. -(void) BeginThread{  
    2. [self performSelectorInBackgroud:@selector(dosomethinglongtime)  
    3.  withObject:nil];  
    4. [self perfomSelectorOnMainThread:@selector(UpdateUI)  
    5.  withObject:nil  
    6. watUntilDone:NO];  
    7. }  

    3. 那UpdateUI的数据怎么来呢

    1. -(void)dosomethinglongtime{  
    2. // 修改共享变量 varProgress, varText等等  
    3. }  
    4.   
    5. -(void)UpdateUI{  
    6. // 获得共享变量 varProgress, varText等等, 显示在界面上  
    7. }  

    这样就完成了一个大概的流程,但是UpdateUI里不能用while(1),不然主线程会堵在UpdateUI的函数里,怎么办呢? Google了一个方法, UpdateUI的方法做了一下修改

    1. -(void)UpdateUI{  
    2. // 获得共享变量 varProgress, varText等等, 显示在界面上  
    3. if(!finished)  
    4.      [NSTimer scheduledTimerWithTimeInterval:0.2  
    5.  target:self  
    6. selector:@selector(UpdateUI)  
    7.  userInfo:nil repeats:NO];  
    8. }  

    这样的意思, 如果没线程没结束,过0.2秒再回到这个函数更新界面, 如此循环, 直到结束.

    以上IPhone多线程编程的一种方法, 当然还有人提议用NSOperation和NSOperationQueue,但我试了一把,没把效果试出来, 等有结果再回来更新. 嘿嘿.

  • 相关阅读:
    为什么要用where 1=1?
    idea中.ignore忽略提交文件到Git的使用
    IDEA开发工具使用 git 创建项目、拉取分支、合并分支
    Linux常用命令及Linux系统根目录下各个目录的作用
    Xshell和Xftp的安装与使用教程
    Moco使用简单指导
    这样写会有什么问题呢?
    grunt学习笔记
    基于nginx的WebSocket反向代理
    maven依赖查找方法
  • 原文地址:https://www.cnblogs.com/chen1987lei/p/2032256.html
Copyright © 2020-2023  润新知