IOS开发/iphone开发多线程

有时候可能有很多功能要同时实现,例如每隔多长时间就会检测程序网络连接,又或者有时候需要从服务器下载一个不小的文件,如果用单线程几乎是不可想的事情,程序将会卡的无法使用,用到多线程和不用多线程,给用户的体验天壤之别,所以多线程是一个ios开发人员必须学会的一个知识点。

多线程,听得有点高深,其实很简单。在iphone中,多线程可以这么理解,除主线程外还有其他线程,主线程和其他线程的区别是最重要的,最简单的理解方法就是主线程会改变界面,其他线程不会改变,主线程可以调用其他线程,

1.声明一个线程又两种方法:1.thread1=[[NSThread alloc]initWithTarget:self selector:@selector(tt1) object:nil];这种方法必须启动 [thread1 start];
                                  2.[NSThread detachNewThreadSelector:@selector(tt1) toTarget:self withObject:nil];这种方法不需要声明NSThread对象,也不需要启动,默认执行到这句就直接运行了

2.当程序在后台执行时,可能有时候需要调用另外的方法,这个方法名是[self performSelectorInBackground:@Selector(threadMethod) withObject:nil]

3.设置线程优先级-(void)setThreadPriority:(double)priority;线程优先级是从0.0到1.0,1.0是最高优先级。系统默认的优先级是0.5

4.线程休眠:+(void)sleepForTimeInterval:(NSTimeInterval)time;time参数为休眠时间。

5.线程的交互:线程的运行过程中,可能需要与其他线程进行通信,如在主线程中修改界面等等,可以使用如下接口:-(void)performSelectorOnMainThread:(SEL)Selectoe   withObject:(id)arg  waitUntilDone:(bool)wait;

6.线程的同步和线程琐,可以了解下

7.线程池,可以了解下

用多线程实现一个简单的程序

#import <UIKit/UIKit.h>

@interface toolbar_1ViewController : UIViewController {
    UILabel * l1;
    UILabel * l2;
    UILabel * l3;
    UILabel * l4;
    UILabel * l5;
    UIButton *b1;
    UIButton *b2;
    UIButton *b3;
    UIButton *b4;
    UIButton *b5;
    NSThread *thread1;
    NSThread *thread2;
    NSThread *thread3;
    NSThread *thread4;
    bool button1;
    bool button2;
    bool button3;
    bool button4;
    bool button5;
    int i1;
    int i2;
    int i3;
    int i4;
    int i5;
    NSCondition *lock;
}
@property (nonatomic,retain)IBOutlet UILabel *l1;
@property (nonatomic,retain)IBOutlet UILabel *l2;
@property (nonatomic,retain)IBOutlet UILabel *l3;
@property (nonatomic,retain)IBOutlet UILabel *l4;
@property (nonatomic,retain)IBOutlet UILabel *l5;
@property (nonatomic,retain)IBOutlet UIButton *b1;
@property (nonatomic,retain)IBOutlet UIButton *b2;
@property (nonatomic,retain)IBOutlet UIButton *b3;
@property (nonatomic,retain)IBOutlet UIButton *b4;
@property (nonatomic,retain)IBOutlet UIButton *b5;

-(IBAction)b1:(id)sender;
-(IBAction)b2:(id)sender;
-(IBAction)b3:(id)sender;
-(IBAction)b4:(id)sender;
-(IBAction)b5:(id)sender;
-(void)t1;
-(void)tt1;
-(void)t2;
-(void)tt2;
-(void)t3;
-(void)tt3;
-(void)t4;
-(void)tt4;
-(void)changeAll;

@end

#import "toolbar_1ViewController.h"
@implementation toolbar_1ViewController
@synthesize l1;
@synthesize l2;
@synthesize l3;
@synthesize l4;
@synthesize l5;
@synthesize b1;
@synthesize b2;
@synthesize b3;
@synthesize b4;
@synthesize b5;

-(IBAction)b1:(id)sender
{
    thread1=[[NSThread alloc]initWithTarget:self selector:@selector(tt1) object:nil]; 
    button1=!button1;
    if(button1){
        [b1 setTitle:@"停止1" forState:UIControlStateNormal] ;
        [self changeAll];
        [thread1 start];
    }
    else {
        [b1 setTitle:@"启动1" forState:UIControlStateNormal] ;
        [self changeAll];
        [thread1 cancel];
    }
   
}
-(void)changeAll
{
    if (button1&&button2&button3&button4) {
        [b5 setTitle:@"停止全部" forState:UIControlStateNormal] ;
        button5=YES;
    }
    if (!button1&&!button2&!button3&!button4) {
        [b5 setTitle:@"启动全部" forState:UIControlStateNormal] ;
        button5=NO;
    }
}
-(void)tt1
{
    while (button1) {
        [self performSelectorOnMainThread:@selector(t1) withObject:nil waitUntilDone:NO];
        [NSThread sleepForTimeInterval:1.0];
    }   
}
-(void)t1
{
    l1.text=[NSString stringWithFormat:@"%d",++i1];
    [lock lock];
    i5 ++ ;
    [lock unlock];
    l5.text=[NSString stringWithFormat:@"%d",i5];
    [self.view setNeedsDisplay];
}

-(IBAction)b2:(id)sender
{
    thread2=[[NSThread alloc]initWithTarget:self selector:@selector(tt2) object:nil]; 
    button2=!button2;
    if(button2){
        [b2 setTitle:@"停止2" forState:UIControlStateNormal] ;
        [self changeAll];
        [thread2 start];
    }
    else {
        [b2 setTitle:@"启动2" forState:UIControlStateNormal] ;
        [self changeAll];
        [thread2 cancel];
    }   
}
-(void)tt2
{
    while (button2) {
        [self performSelectorOnMainThread:@selector(t2) withObject:nil waitUntilDone:NO];
        [NSThread sleepForTimeInterval:1.0];
    }
}
-(void)t2
{
    l2.text=[NSString stringWithFormat:@"%d",++i2];
    [lock lock];
    i5 ++ ;
    [lock unlock];
    l5.text=[NSString stringWithFormat:@"%d",i5];
    [self.view setNeedsDisplay];
}
-(IBAction)b3:(id)sender
{
    thread3=[[NSThread alloc]initWithTarget:self selector:@selector(tt3) object:nil];
    button3=!button3;
    if(button3){
        [b3 setTitle:@"停止3" forState:UIControlStateNormal] ;
        [self changeAll];
        [thread3 start];
    }
    else {
        [b3 setTitle:@"启动3" forState:UIControlStateNormal] ;
        [self changeAll];
        [thread3 cancel];
    }
   
   
}
-(void)tt3
{
    while (button3) {
        [self performSelectorOnMainThread:@selector(t3) withObject:nil waitUntilDone:NO];
        [NSThread sleepForTimeInterval:1.0];
    }
}
-(void)t3
{
    l3.text=[NSString stringWithFormat:@"%d",++i3];
    [lock lock];
    i5 ++ ;
    [lock unlock];
    l5.text=[NSString stringWithFormat:@"%d",i5];
    [self.view setNeedsDisplay];
}
-(IBAction)b4:(id)sender
{
    thread4=[[NSThread alloc]initWithTarget:self selector:@selector(tt4) object:nil];
    button4=!button4;
    if(button4){
        [b4 setTitle:@"停止4" forState:UIControlStateNormal] ;
        [self changeAll];
        [thread4 start];
    }
    else {
        [b4 setTitle:@"启动4" forState:UIControlStateNormal] ;
        [self changeAll];
        [thread4 cancel];
    }   
}
-(void)tt4
{
    while (button4) {
        [self performSelectorOnMainThread:@selector(t4) withObject:nil waitUntilDone:NO];
        [NSThread sleepForTimeInterval:1.0];
    }
}
-(void)t4
{
    l4.text=[NSString stringWithFormat:@"%d",++i4];
    [lock lock];
    i5 ++ ;
    [lock unlock];
    l5.text=[NSString stringWithFormat:@"%d",i5];
    [self.view setNeedsDisplay];
}
-(IBAction)b5:(id)sender
{
    if(!button5){
        [b5 setTitle:@"停止全部" forState:UIControlStateNormal] ;
        if (!button1) {
            thread1=[[NSThread alloc]initWithTarget:self selector:@selector(tt1) object:nil]; 
            button1=!button1;
            [b1 setTitle:@"停止1" forState:UIControlStateNormal] ;
            [thread1 start];
        }
        if (!button2) {
            thread2=[[NSThread alloc]initWithTarget:self selector:@selector(tt2) object:nil]; 
            button2=!button2;
            [b2 setTitle:@"停止2" forState:UIControlStateNormal] ;
            [thread2 start];
        }
        if (!button3) {
            thread3=[[NSThread alloc]initWithTarget:self selector:@selector(tt3) object:nil]; 
            button3=!button3;
            [b3 setTitle:@"停止3" forState:UIControlStateNormal] ;
            [thread3 start];
        }
        if (!button4) {
            thread4=[[NSThread alloc]initWithTarget:self selector:@selector(tt4) object:nil]; 
            button4=!button4;
            [b4 setTitle:@"停止4" forState:UIControlStateNormal] ;
            [thread4 start];
        }
    }
    else{
        [b5 setTitle:@"启动全部" forState:UIControlStateNormal] ;
        if (button1) {
            button1=!button1;
            [b1 setTitle:@"启动1" forState:UIControlStateNormal] ;
            [thread1 cancel];
        }
        if (button2) {
            button2=!button2;
            [b2 setTitle:@"启动2" forState:UIControlStateNormal] ;
            [thread2 cancel];
        }
        if (button3) {
            button3=!button3;
            [b3 setTitle:@"启动3" forState:UIControlStateNormal] ;
            [thread3 cancel];
        }
        if (button4) {
            button4=!button4;
            [b4 setTitle:@"启动4" forState:UIControlStateNormal] ;
            [thread4 cancel];
        }       
    }
    button5=!button5;
}

- (void)dealloc
{
    [l1 release];
    [l2 release];
    [l3 release];
    [l4 release];
    [l5 release];
    [b1 release];
    [b2 release];
    [b3 release];
    [b4 release];
    [b5 release];
    [thread1 release];
    [thread2 release];
    [thread3 release];
    [thread4 release];
    [super dealloc];
}

- (void)viewDidLoad
{
    i1=0;
    button1=false;
    button2=false;
    button3=false;
    button4=false;
    button5=false;
   
    i5=i2=i3=i4=i1;
    l1.text=[NSString stringWithFormat:@"%d",i1];
    l2.text=[NSString stringWithFormat:@"%d",i2];
    l3.text=[NSString stringWithFormat:@"%d",i3];
    l4.text=[NSString stringWithFormat:@"%d",i4];
    l5.text=[NSString stringWithFormat:@"%d",i5];
}

@end

XIB文件如下

时间: 2024-08-28 14:40:29

IOS开发/iphone开发多线程的相关文章

iphone开发 IOS 组织架构图

转载自 :http://blog.csdn.net/mashi321323/article/details/18267719 登录|注册     mashi321323的专栏 目录视图 摘要视图 订阅 10月28日 大牛带你玩转Spark    微信开发学习路线高级篇上线    免费公开课平台正式上线啦    恭喜July新书上市 iphone开发 IOS 组织架构图 分类: iphone2014-01-14 17:20 1870人阅读 评论(0) 收藏 举报 iphone开发组织架构 目录(?

iOS/iphone开发如何为苹果开发者帐号APPID续费

原文地址:iOS/iphone开发如何为苹果开发者帐号APPID续费作者:陈双超_群雄 其实相当的简单,这篇内容是给财务看的,有的地方连我自己看了都感觉有点...但如果不详细,她又要为难我,所以我就当她0智商 1.     打开 https://developer.apple.com/account/overview.action 2.(如何查看到自己的证书哪天到期,就是具体日起,这个的话平时是看不到的只有在最后60天的时候会提醒你.) 3.4.5.6.7.为了避免财务输入麻烦或者她输入出错引起

iOS开发网络篇—多线程断点下载

iOS开发网络篇—多线程断点下载 说明:本文介绍多线程断点下载.项目中使用了苹果自带的类,实现了同时开启多条线程下载一个较大的文件.因为实现过程较为复杂,所以下面贴出完整的代码. 实现思路:下载开始,创建一个和要下载的文件大小相同的文件(如果要下载的文件为100M,那么就在沙盒中创建一个100M的文件,然后计算每一段的下载量,开启多条线程下载各段的数据,分别写入对应的文件部分). 项目中用到的主要类如下: 完成的实现代码如下: 主控制器中的代码: 1 #import "YYViewControl

iOS开发UI篇—iPad和iPhone开发的比较

iOS开发UI篇—iPad和iPhone开发的比较 一.iPad简介 1.什么是iPad 一款苹果公司于2010年发布的平板电脑 定位介于苹果的智能手机iPhone和笔记本电脑产品之间 跟iPhone一样,搭载的是iOS操作系统 2.iPad的市场情况 截止至2013年10月23日,iPad已经累计销售1.7亿台 在平板市场的占有率高达81% 二.关于iphone和iPad 说明:iPhone是手机,iPad.iPad Mini是平板电脑 iPhone和iPad开发的区别 屏幕的尺寸 \分辨率

iOS开发---iPhone SDK 包含哪些东西?

第一部分: 在使用Intel芯片的Macintosh计算机开发iOS应用程序所需的全部接口.工具以及资源全都包含于iPhone SDK. 苹果公司将大部分系统接口发布在框架这种特殊的数据包.一个框架就是一个目录,它包含一个动态共享库以及使用这个库所需的资源(例如头文件.图像以及帮助应用程序等).如果要使用某个框架,则需要将其链接到应用程序工程,这一点和使用其他共享库相似.另外,您还需要告知开发工具何处可以找到框架头文件以及其他资源. 除了使用框架,苹果公司还通过标准共享库的形式来发布某些技术.

iOS开发之网络多线程

iOS开发之网络多线程 1. pthred (POSIX) 一般情况不用 2. NSThread NSThread *thread1 = [[NSThread alloc] initWithTarget:self selector:@selector(dealThreadExit:) object:nil]; [thread1 start]; [NSThread detachNewThreadSelector:@selector(detailTextLabel) toTarget:self wi

ios学习笔记(一)Windows7上使用VMWare搭建iPhone开发环境(转)

原文地址:http://blog.csdn.net/shangyuan21/article/details/18153605 我们都知道开发iPhone等ios平台的移动应用时需要使用Mac本,但是Mac本都比较昂贵,所以我们可以采用Windows7上利用VMWare安装Mac操作系统的方法来模拟ios开发环境,达到降低成本的目的. 1.相关配置 操作系统:windows7旗舰版 Work station:VMWare10 Mac操作操作系统:OS X 10.8 2.相关资源下载地址 (1)VM

【转】iOS开发UI篇—iPad和iPhone开发的比较

原文网址:http://www.cnblogs.com/wendingding/p/3918007.html iOS开发UI篇—iPad和iPhone开发的比较 一.iPad简介 1.什么是iPad 一款苹果公司于2010年发布的平板电脑 定位介于苹果的智能手机iPhone和笔记本电脑产品之间 跟iPhone一样,搭载的是iOS操作系统 2.iPad的市场情况 截止至2013年10月23日,iPad已经累计销售1.7亿台 在平板市场的占有率高达81% 二.关于iphone和iPad 说明:iPh

ios - iPhone开发重构:从硬编码到模型到规律

无论在iPhone开发还是学习的过程中都会看到一些不是很理想的代码,不可 否认自己也在不断“贡献”着这类代码.面对一些代码的“坏味道”,重构显然 是个有效的解决途径.<iPhone开发重构>系列就想总结和补充iPhone开发中经 历的一些重构,其间可能会引用一些开源以及实际项目的代码,本着对技术的探 求,冒昧之处还请作者多多见谅. 在iPhone开发的过程中经常会遇到根据不同的Table行或者标识符推入不同 的Controller的需要,一个最直接的实现就是硬编码,通过if…else if…e