`

iPhone开发多线程开发之NSThread——子线程模拟耗时操作 .

    博客分类:
  • ios
阅读更多
实现的功能:1)演示多线程开发。2)子线程中模拟耗时操作,然后通知主线程更新进度条。

关键词:多线程 NSThread 定时器

效果图:
[img]

[/img],[img]

[/img]




1、新建视图控制器ViewController.m(不带xib),作为根视图控制器,通过ViewController的-(void)loadView方法构建UI,ViewController.h如下:

#import <UIKit/UIKit.h>

@interface ViewController : UIViewController{
    CGFloat progressValue; //进度条的值
}

@property(strong,nonatomic)UIProgressView *progress; 
@property(strong,nonatomic)UILabel *showValue;
@property(strong,nonatomic)UIButton *startThread;

@end


ViewController.m如下:
#import "ViewController.h"

@implementation ViewController
@synthesize progress;
@synthesize showValue;
@synthesize startThread;

-(void)loadView{
    CGRect appFrame = [UIScreen mainScreen].applicationFrame;
    UIView *view = [[UIView alloc]initWithFrame:appFrame];
    self.view = view;
    
    //设置背景颜色
    UIColor *bgcolor = [UIColor grayColor];
    [self.view setBackgroundColor:bgcolor];
    
    [self initViews];
}

//初始化视图组件
-(void)initViews{
    //初始化progress
    CGRect frame = CGRectMake(50, 50, 200, 30);
    progress = [[UIProgressView alloc]initWithFrame:frame];
    [self.view addSubview:progress];
    
    //初始化showValue
    showValue = [[UILabel alloc]init];
    frame = showValue.frame;
    frame.origin.x = CGRectGetMaxX(progress.frame)+10;
    frame.origin.y = CGRectGetMinY(progress.frame);
    frame.size.width = 35;
    frame.size.height = 15;
    showValue.frame = frame;
    showValue.backgroundColor = [UIColor redColor];
    showValue.text = @"0.0";
    [self.view addSubview:showValue];
    
    //初始化startThread
    startThread = [[UIButton alloc]init];
    frame = startThread.frame;
    frame.origin.x = 110;
    frame.origin.y = 80;
    frame.size.width = 100;
    frame.size.height = 50;
    startThread.frame = frame;
    UIImage *img = [UIImage imageNamed:@"btn.png"];
    [startThread setBackgroundImage:img forState:UIControlStateNormal];
    [startThread setTitleColor:[UIColor colorWithRed:1.0 green:0 blue:0 alpha:1.0] forState:UIControlStateNormal];
    [startThread setTitle:@"开启子线程" forState:UIControlStateNormal];
    //设置事件
    [startThread addTarget:self action:@selector(startThreadButtonPressed) forControlEvents:UIControlEventTouchUpInside];
    [self.view addSubview:startThread];
}

//开启子线程
-(void)startThreadButtonPressed{
    progress.progress = 0.0;
    showValue.text = @"0.0";
    startThread.hidden = YES;
    //该语句会让主线程堵塞2秒,这就是为什么要将耗时操作放在子线程的原因之一
    //[NSThread sleepForTimeInterval:2];
    
    //开启一个新线程
    [NSThread detachNewThreadSelector:@selector(doJobInBackground) toTarget:self withObject:nil];
}

//子线程,后台执行工作
-(void)doJobInBackground{
    //睡眠,模拟子线程中耗时操作
    [NSThread sleepForTimeInterval:2];
    //通知主线程执行更新操作
    [self performSelectorOnMainThread:@selector(invalidateProgress) withObject:nil waitUntilDone:NO];
}

//更新进度
-(void)invalidateProgress{
    progressValue = [progress progress];
    showValue.text = [NSString stringWithFormat:@"%.2f",progressValue];
    if(progressValue < 1.0){
        progress.progress = progressValue+0.02;
        //启动定时器
        [NSTimer scheduledTimerWithTimeInterval:0.2 target:self selector:@selector(invalidateProgress) userInfo:nil repeats:NO];
    }else{
        progress.progress = 1.0;
        showValue.text = @"1.0";
        startThread.hidden = NO;
    }
}

- (void)viewDidUnload
{
    [super viewDidUnload];
    // Release any retained subviews of the main view.
    progress = nil;
    showValue = nil;
    startThread = nil;
}

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    return (interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown);
}

@end



  • 大小: 78.6 KB
  • 大小: 71.1 KB
分享到:
评论

相关推荐

    IOS应用源码——ui多线程的简单例子 NSThread.zip

    这个名为"NSThread.zip"的压缩包提供了一个简单的iOS应用源码示例,专门用于演示如何在iOS中使用NSThread进行多线程编程。 首先,我们要理解什么是多线程。在计算机系统中,线程是操作系统调度的基本单位,一个进程...

    IOS应用源码——NSThread.zip

    在这个名为"NSThread.zip"的压缩包中,我们很可能是得到了一个示例项目或者代码库,专门展示了如何在iOS应用中使用NSThread进行线程操作。现在,让我们深入探讨一下NSThread以及它在iOS开发中的关键知识点。 1. **...

    iOS多线程开发NSThread.pdf

    iOS 多线程开发 NSThread 是 iOS 平台上支持的多线程编程方式之一。多线程编程是指一个应用程序同时执行多个线程,以提高应用程序的响应速度和效率。iOS 支持多个层次的多线程编程,层次越高的抽象程度越高,使用...

    iOS多线程编程技术之NSThread、Cocoa NSOperation、GCD

    在iOS开发中,有多种实现多线程的方式,包括`NSThread`、`NSOperation`以及`GCD`(Grand Central Dispatch)。 1. **NSThread** - **应用场景**:适用于需要将Objective-C中的某个方法放到独立线程中运行的情况。 ...

    iOS多线程之NSThread详解

    iOS多线程开发一 使用NSThread NSThread的基本使用 // demo说明 NSThreadDemoOne: 简单使用多线程,区分有多线程和没有多线的区别 NSThreadDemoTwo: 因为NSThread只能传一个一个参数,如果咬传递多个参数,使用封装...

    iOS多线程 (pthread,NSThread)简单Demo

    在iOS开发中,多线程技术是不可或缺的一部分,它能够帮助我们提高应用程序的响应速度和用户体验。本示例将深入探讨两种最基础的多线程实现方式:pthread和NSThread。 首先,我们来理解一下多线程的概念。多线程是指...

    IOS应用源码——多线程.zip

    在iOS应用开发中,多线程是一个至关重要的概念,它使得应用程序可以同时执行多个任务,提升用户体验并优化系统资源的使用。本资源“IOS应用源码——多线程.zip”包含了一个具体的iOS应用实例,用于展示如何在项目中...

    iphone开发多线程

    本文将深入探讨“iPhone开发多线程”这一主题,基于提供的描述和标签,我们将关注iOS平台上的多线程概念、实现方式以及一个名为“ThreadSyncSample”的示例项目。 首先,我们需要理解什么是多线程。在单线程环境中...

    iPhone开发之多线程入门示例程序

    在“iPhone开发之多线程入门示例程序”中,我们主要会接触到苹果的Foundation框架中的多线程解决方案,包括NSThread、NSOperation和GCD(Grand Central Dispatch)。 首先,NSThread是Objective-C中的一个类,它...

    iOS 开发 之 多线程总结

    iOS开发中的多线程技术是提升应用性能和用户体验的关键,特别是在处理耗时操作时,如网络请求、数据计算或大文件上传。本文将对多线程进行深入总结,主要涵盖线程的基本概念、使用多线程的原因以及在iPhone平台上...

    NSThread多线程

    在iOS中,主线程主要负责处理用户交互和UI更新,而其他线程则可以用于执行耗时的操作,如网络请求、数据计算等,这样就不会阻塞主线程,保证了界面的流畅。 NSThread的使用主要包括以下几个方面: 1. 创建线程:你...

    多线程.rar

    总结:在iPhone开发中,熟练掌握多线程技术,合理运用Object-C提供的NSOperationQueue、GCD以及NSThread,是构建高性能、响应迅速的应用的关键。理解线程安全和线程间通信,以及如何进行性能优化,对于提升应用质量...

    多线程GCD,NSThread,NSOperationQueue,详细解释Demo

    在iOS和macOS开发中,多线程技术是不可或缺的一部分,它使得应用程序能够同时执行多个任务,提升用户体验。本篇文章将深入探讨GCD (Grand Central Dispatch)、NSThread和NSOperationQueue这三种主要的多线程实现方式...

    iphone 多线程

    本篇将详细介绍iPhone开发中的多线程,特别是NSThread和NSInvocationOperation的使用。 **一、多线程基础** 在iOS中,多线程主要包括以下几种实现方式: 1. **NSThread**:这是Objective-C中直接对线程进行操作的...

    iOS多线程开发——NSThread浅析

    第三,多线程开发中常见的一种应用场景是子线程执行耗时操作,主线程负责UI更新。这可以通过`performSelectorOnMainThread:withObject:waitUntilDone:`方法实现。在`run`方法中调用此方法,将更新UI的操作委托给主线...

    Iphone下多线程的开发

    - **响应速度快**:主线程(通常是UI线程)处理用户交互的同时,其他线程可以处理耗时的操作(如网络请求、数据处理等),从而提高应用的整体响应速度。 - **代码结构清晰**:通过将不同的任务分配到不同的线程中...

    iphone多线程编程

    在iPhone开发中,多线程编程是一项重要的技术。为了提高应用性能与响应性,合理地利用多线程可以显著提升用户体验。本篇将深入探讨iOS环境下的多线程概念、实现方法以及常见问题。 #### 二、基础概念 **1. 什么是...

    演示多线程加载图片NSThread NsOperation GCD

    在iOS开发中,多线程技术是不可或缺的一部分,特别是在处理耗时操作如加载图片时,为了保持用户界面的流畅,我们需要将这些任务放在后台线程执行。本教程将重点讲解三种多线程技术:NSThread、NSOperation和GCD...

Global site tag (gtag.js) - Google Analytics