iPhone多线程编程初体验

来源:网络 责任编辑:栏目编辑 发表时间:2013-07-01 21:49 点击:

iPhone多线程编程初体验

2011-06-07 17:35 佚名 互联网 我要评论(0) 字号:T | T

 

多线程编程是防止主线程堵塞,增加运行效率等等的最佳方法。而原始的多线程方法存在很多的毛病,包括线程锁死等。

AD:

找了很长时间IPhone下多线程的编程的内容, 用到的类是UIKit的中NSThread.。

 

在google过程中,发现很多文都惊喜地标题着类似< 多线程的OS4来了>, 这些想正向引导一下, 0S4的亮点在于多任务,一个任务为一个进程,也叫多进程, 而多线程在早期的IPHONEOS上都是有的.

 

IPHONE OS中任务的概念是一个应用, 在一个时间你只能做一件事情, 即不能同时玩游戏,同时上QQ. 而多任务的时候是可以这么做的.

 

流程大概如下:

 

1. 创建一个线程

 

[NSThread detachNewThreadSelect:@selector(BeginThread)    

toTarget:selft    

withObject:nil];   

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

 

view plaincopy to clipboardprint? 

(void) BeginThread{    

[self performSelectorInBackgroud:@selector(dosomethinglongtime)    

withObject:nil];    

[self perfomSelectorOnMainThread:@selector(UpdateUI)    

withObject:nil    

watUntilDone:NO];    

}   

3. 那UpdateUI的数据怎么来呢

 

view plaincopy to clipboardprint? 

-(void)dosomethinglongtime{    

// 修改共享变量varProgress, varText等等    

}    

{void)UpdateUI{    

// 获得共享变量varProgress, varText等等, 显示在界面上    

}

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

 

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

 

view plaincopy to clipboardprint? 

(void)UpdateUI{    

// 获得共享变量varProgress, varText等等, 显示在界面上    

if(!finished)    

[NSTimer scheduledTimerWithTimeInterval:0.2 target:self    

selector:@selector(UpdateUI)  userInfo:nil repeats:NO];    

}   

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

    发表评论
    请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
    用户名: 验证码:点击我更换图片
    最新评论 更多>>

    推荐热点

    • Lexical or Preprocessor Issue 'xxx.h
    • ios学习笔记(二)xcode 4.3.2下实现基本交互
    • ios版本的helloworld
    • iphone(object-c) 内存管理(3) 有效的内存管理 前半部分
    • ios学习笔记(一)xcode 4.3.2下创建第一个ios项目
    • IOS类似iphone通讯录TableView的完整demo【附源码】
    • UITableView一些方法
    • [iPhone中级]iPhone团购信息客户端的开发 (二)
    • iphone(object-c)内存管理(1)
    网站首页 - 友情链接 - 网站地图 - TAG标签 - RSS订阅 - 内容搜索
    Copyright © 2008-2015 计算机技术学习交流网. 版权所有

    豫ICP备11007008号-1