iPhone开发进阶(11)--- 多线程的使用与注意事项

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

 

这一回,主要介绍一下iPhone SDK中多线程的使用方法以及注意事项。虽然现在大部分PC应用程序都支持多线程/多任务的开发方式,但是在iPhone上,Apple并不推荐使用多线程的编程方式。但是多线程编程毕竟是发展的趋势,而且据说即将推出的iPhone OS4将全面支持多线程的处理方式。所以说掌握多线程的编程方式,在某些场合一定能挖掘出iPhone的更大潜力。

 

从例子入手

先从一个例程入手,具体的代码参考了这里。还有例程可以下载。

 

多线程程序的控制模型可以参考这里,一般情况下都是使用 管理者/工人模型, 这里,我们使用iPhone SDK中的NSThread 来实现它。

 

首先创建一个新的View-based application 工程,名字为"TutorialProject" 。界面如下图所示,使用UILabel实现两部分的Part(Thread Part和Test Part),Thread Part中包含一个UIProgressView和一个UIButton;而Test Part包含一个值和一个UISlider。

 


接下来,在TutorialProjectViewController.h 文件中创建各个UI控件的IBOutlets.

 

 

@interface TutorialProjectViewController : UIViewController {

 

    // ------ Tutorial code starts here ------

 

    // Thread part

    IBOutlet UILabel *threadValueLabel;

    IBOutlet UIProgressView *threadProgressView;

    IBOutlet UIButton *threadStartButton;

 

    // Test part

    IBOutlet UILabel *testValueLabel;

 

    // ------ Tutorial code ends here ------

 

}

同时,也需要创建outlets变量的property.

 

@property (nonatomic, retain) IBOutlet UILabel *threadValueLabel;

@property (nonatomic, retain) IBOutlet UIProgressView *threadProgressView;

@property (nonatomic, retain) IBOutlet UIProgressView *threadStartButton;

@property (nonatomic, retain) IBOutlet UILabel *testValueLabel;

接下来定义按钮按下时的动作函数,以及slider的变化函数。

 

- (IBAction) startThreadButtonPressed:(UIButton *)sender;

- (IBAction) testValueSliderChanged:(UISlider *)sender;

然后在TutorialProjectViewController.m 文件中synthesize outlets,并在文件为实现dealloc释放资源。

@synthesize threadValueLabel, threadProgressView, testValueLabel, threadStartButton;

 

...

 

- (void)dealloc {

 

    // ------ Tutorial code starts here ------

 

    [threadValueLabel release];

    [threadProgressView release];

    [threadStartButton release];

 

    [testValueLabel release];

 

    // ------ Tutorial code ends here ------

 

    [super dealloc];

}

现在开始线程部分的代码,首先当thread button 被按下的时候,创建新的线程.

 

- (IBAction) startThreadButtonPressed:(UIButton *)sender {

    threadStartButton.hidden = YES;

    threadValueLabel.text = @"0";

    threadProgressView.progress = 0.0;

    [NSThread detachNewThreadSelector:@selector(startTheBackgroundJob) toTarget:self withObject:nil];

}

该按钮被按下后,隐藏按钮以禁止多次创建线程。然后初始化显示值和进度条,最后创建新的线程,线程的函数为startTheBackgroundJob.

 

具体的startTheBackgroundJob 函数定义如下.

- (void)startTheBackgroundJob {

 

    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];

    // 线程开始后先暂停3秒(这里只是演示暂停的方法,你不是必须这么做的)

    [NSThread sleepForTimeInterval:3];

&

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

    推荐热点

    • 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应用创建启动界面
    网站首页 - 友情链接 - 网站地图 - TAG标签 - RSS订阅 - 内容搜索
    Copyright © 2008-2015 计算机技术学习交流网. 版权所有

    豫ICP备11007008号-1