`
wenxin2009
  • 浏览: 320585 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

ios线程

    博客分类:
  • ios
阅读更多

NSThread实现多线程,初始化线程有:

- init

- initWithTarget:selector:object:

后者可以绑定初始化方法。

 

detachNewThreadSelector可启动一个新的线程。

NSThread创建线程两种方式:

方式一:

[NSThread detachNewThreadSelector:@selector(doSomething_1:) toTarget:self withObject:@"Dwen"];

方式二:

NSThread t1 = [[NSThread alloc] initWithTarget:self selector:@select(doSomething) object:nil];

[t1 start];

 

performSelectorOnMainThread线程结束后,处理绑定的方法。如果程序执行完后需要刷新界面,可通过这种方式进行处理。

 

ios4如果线程较多,需要手动处理释放线程池:

NSAutoreleasePool *pool;
    for (int i = 0; i < 1000*1000; i++) {
        if(i%1000 == 0)
        {
           pool = [[NSAutoreleasePool alloc] init];
        }
        if(i%1000 == 999)
        [pool release];
        //use s to do something;
        
    }

 ios5以上由于运用了ARC,取消了NSAutoreleasePool类,无需作释放处理。

 

示例代码

#import <UIKit/UIKit.h>

@interface ViewController : UIViewController
@property (assign,nonatomic) int tickets;
@property (assign,nonatomic) int count;
@property (strong,nonatomic) NSThread *t1;
@property (strong,nonatomic) NSThread *t2;
@property (strong,nonatomic) NSThread *t3;
@property (strong,nonatomic) NSThread *t4;
@property (strong,nonatomic) NSCondition *tc;

- (IBAction)start:(id)sender;

-(void)doSomething;

 

#import "ViewController.h"

@interface ViewController ()

@end

@implementation ViewController
@synthesize tickets;
@synthesize count;
@synthesize t1;
@synthesize t2;
@synthesize t3;
@synthesize t4;
@synthesize tc;

- (void)viewDidLoad
{
    [super viewDidLoad];
	tickets = 10;
    count = 0;
    //锁对象
    tc = [[NSCondition alloc] init];
    t1 = [[NSThread alloc] initWithTarget:self selector:@selector(doSomething) object:nil];
    [t1 setName:@"Thread-1"];//线程名称
    [t1 setStackSize:1024*1024];//堆栈大小
    [t1 setThreadPriority:0.8];//线程优先级
    [t1 start];
    
    t2 = [[NSThread alloc] initWithTarget:self selector:@selector(doSomething) object:nil];
    [t2 setName:@"Thread-2"];
//    [t1 setStackSize:1024*1024];
//    [t2 setThreadPriority:0.9];
    [t2 start];
    
    t3 = [[NSThread alloc] initWithTarget:self selector:@selector(doSomething) object:nil];
    [t3 setName:@"Thread-3"];
    [t1 setStackSize:1024*1024];
    [t3 setThreadPriority:0.6];
    [t3 start];
    
    t4 = [[NSThread alloc] initWithTarget:self selector:@selector(doSomething) object:nil];
    [t4 setName:@"Thread-4"];
    [t1 setStackSize:1024*1024];
    [t4 setThreadPriority:1.0];
    [t4 start];
    
    
}

- (IBAction)start:(id)sender {
    [NSThread detachNewThreadSelector:@selector(doSomething_1:) toTarget:self withObject:@"Dwen"];
    [self performSelectorOnMainThread:@selector(doSomething_2:) withObject:@"end thread" waitUntilDone:NO];
}

- (void) doSomething_1 : (NSString *)name{
    NSLog(@"detachNewThreadSelector新启一个线程名叫:%@",name);
}

- (void) doSomething_2 : (NSString *)name{
    NSLog(@"performSelectorOnMainThread调用:%@",name);
}

- (void) doSomething{
    while (TRUE) {
        //上锁
        [tc lock];
        if (tickets > 0) {
            [NSThread sleepForTimeInterval:0.5];
            count = 100 - tickets;
            NSLog(@"当前票数是:%d,售出:%d,线程名:%@",tickets,count,[[NSThread currentThread] name]);
            tickets--;
        }else {
            break;
        }
        //解锁
        [tc unlock];
        
    }
}

@end

 

 

 

 

 

 

 

 

 

 

 

分享到:
评论

相关推荐

    IOS线程管理,线程同步

    本文将深入探讨iOS线程管理,特别是线程的创建和线程同步,这些都是开发者需要掌握的基本知识。 首先,我们来理解一下线程的概念。线程是程序执行的最小单位,一个进程可以有多个线程并行执行,这样可以充分利用...

    iOS线程同步方案

    在iOS开发中,多线程技术是不可或缺的一部分,它能够有效地提升应用的性能,通过并发执行任务来提高用户体验。然而,多线程同时也带来了线程安全的问题,这就需要我们掌握线程同步方案来确保数据的一致性和完整性。...

    iOS 线程资料汇总

    本文将深入探讨iOS线程的概念、使用方法,以及并发编程的相关知识。 一、线程基础 线程是操作系统分配CPU时间片的基本单位,一个进程中可以有多个线程并行执行任务。在iOS应用中,主线程主要负责UI更新和事件处理,...

    IOS线程学习文档+实例代码,特别适合新手学习,超好

    本文将深入探讨iOS线程的概念、类型、管理方法,并结合实例代码,为初学者提供一个全面的学习指南。 一、iOS线程概念 线程是操作系统中的基本执行单元,一个进程可以包含多个线程,它们共享同一内存空间,各自负责...

    ios多线程开发的常用四种方式和基本使用

    在iOS开发中,多线程技术是不可或缺的一部分,它能够帮助我们实现应用的高效运行,提升用户体验。本文将深入探讨四种常用的iOS多线程开发方式:pthread、NSThread、NSOperation及NSOperationQueue,以及Grand ...

    iOS线程读写安全

    在iOS开发中,多线程技术是不可或缺的一部分,它使得应用程序可以同时执行多个任务,提升用户体验。然而,多线程环境下处理共享数据时,如果没有正确的线程安全措施,可能会引发数据不一致、程序崩溃等问题。本文将...

    ios多线程编程

    iOS多线程编程是iOS开发中的一个重要技能,对于提升应用程序的性能和用户体验至关重要。在iOS平台上,多线程编程可以通过多种技术实现,包括NSThread、Grand Central Dispatch(GCD)、Operation Objects等。本文档...

    IOS多线程理解

    iOS多线程是移动应用开发中不可或缺的技术,它允许程序在后台执行耗时任务,同时保持主线程的流畅,从而提供良好的用户体验。本文将深入探讨iOS的三种主要多线程编程方式:NSThread、NSOperation和NSOperationQueue...

    iOS两个线程间嵌套发送同步消息的demo

    在iOS开发中,多线程技术是不可或缺的一部分,它能够帮助我们提高应用程序的性能和用户体验。线程间的通信,特别是同步消息的发送,是多线程编程中的一个重要概念。本篇将深入探讨“iOS两个线程间嵌套发送同步消息”...

    iOS控制多线程任务数量

    在iOS开发中,多线程技术是至关重要的,特别是在处理耗时操作时,如网络请求、数据解析等,为了保持用户界面的响应性,我们通常会将这些任务放到后台线程执行。GCD(Grand Central Dispatch)是Apple推出的一种多...

    iOS 多线程编程指南 pdf

    iOS多线程编程指南是一份深入介绍iOS平台下多线程编程技术的文档。文档主要涵盖的技术点包括NSThread、NSOperation以及Grand Central Dispatch(GCD),这些技术是iOS开发者在开发应用程序时常用的技术。 首先,...

    多线程编程指南

    本指南详细介绍了多线程编程在iOS开发中的应用,希望读者能够从中受益,并在实际项目中有效地运用多线程技术。 #### 推荐资源 最后,推荐了一些学习多线程编程的资源,包括书籍、在线教程等,供有兴趣进一步深入...

    iOS多线程Demo

    在iOS开发中,多线程是一项至关重要的技术,它能够帮助开发者实现应用程序的高效运行和流畅的用户体验。本文将深入探讨“iOS多线程Demo”所体现的核心知识点,并结合实际应用进行详细阐述。 首先,我们要了解多线程...

    有关主线程和子线程

    ### iOS线程管理 #### 线程同步与互斥 - **线程锁(`NSLock`)**: 用于保护共享资源不被同时访问,确保数据的一致性。示例代码中定义了一个`NSLock`类型的属性`lock`,用于保护对`totalTickets`变量的访问。 #### ...

    哈哈iOS多线程面试题

    在探讨iOS多线程的面试题目时,我们首先要明确进程和线程的定义及其关系。进程可以被理解为计算机上一次执行活动的程序,它是操作系统分配资源的基本单元,拥有独立的内存空间和运行所需的全部资源。当我们提到一个...

    iOS 多线程运用

    在iOS开发中,多线程是一项至关重要的技术,它能够使应用程序在后台执行任务,同时保持用户界面的响应。本文将深入探讨iOS多线程的运用,通过分析提供的3个Demo,来帮助开发者更好地理解和应用多线程。 一、基础...

    ios 多线程编程指南

    iOS多线程编程指南所涉及的知识点涵盖了多线程编程在iOS平台的应用,包括线程概念、线程管理、RunLoop对象、线程同步等核心概念以及具体实现技术。鉴于文档内容丰富,这里将详细解读并阐述上述知识点。 ### 1. 线程...

    iOS 常驻线程开启方式

    在iOS开发中,多线程是一项基础且重要的技术,它能让我们实现应用程序的并行处理,提高用户体验。本文将深入探讨“iOS常驻线程”的概念、如何创建以及其与POSIX、NSThread和GCD的关系。 首先,我们来解释什么是...

Global site tag (gtag.js) - Google Analytics