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线程的概念、使用方法,以及并发编程的相关知识。 一、线程基础 线程是操作系统分配CPU时间片的基本单位,一个进程中可以有多个线程并行执行任务。在iOS应用中,主线程主要负责UI更新和事件处理,...
本文将深入探讨iOS线程的概念、类型、管理方法,并结合实例代码,为初学者提供一个全面的学习指南。 一、iOS线程概念 线程是操作系统中的基本执行单元,一个进程可以包含多个线程,它们共享同一内存空间,各自负责...
在iOS开发中,多线程技术是不可或缺的一部分,它能够帮助我们实现应用的高效运行,提升用户体验。本文将深入探讨四种常用的iOS多线程开发方式:pthread、NSThread、NSOperation及NSOperationQueue,以及Grand ...
在iOS开发中,多线程技术是不可或缺的一部分,它使得应用程序可以同时执行多个任务,提升用户体验。然而,多线程环境下处理共享数据时,如果没有正确的线程安全措施,可能会引发数据不一致、程序崩溃等问题。本文将...
iOS多线程编程是iOS开发中的一个重要技能,对于提升应用程序的性能和用户体验至关重要。在iOS平台上,多线程编程可以通过多种技术实现,包括NSThread、Grand Central Dispatch(GCD)、Operation Objects等。本文档...
iOS多线程是移动应用开发中不可或缺的技术,它允许程序在后台执行耗时任务,同时保持主线程的流畅,从而提供良好的用户体验。本文将深入探讨iOS的三种主要多线程编程方式:NSThread、NSOperation和NSOperationQueue...
在iOS开发中,多线程技术是不可或缺的一部分,它能够帮助我们提高应用程序的性能和用户体验。线程间的通信,特别是同步消息的发送,是多线程编程中的一个重要概念。本篇将深入探讨“iOS两个线程间嵌套发送同步消息”...
在iOS开发中,多线程技术是至关重要的,特别是在处理耗时操作时,如网络请求、数据解析等,为了保持用户界面的响应性,我们通常会将这些任务放到后台线程执行。GCD(Grand Central Dispatch)是Apple推出的一种多...
iOS多线程编程指南是一份深入介绍iOS平台下多线程编程技术的文档。文档主要涵盖的技术点包括NSThread、NSOperation以及Grand Central Dispatch(GCD),这些技术是iOS开发者在开发应用程序时常用的技术。 首先,...
本指南详细介绍了多线程编程在iOS开发中的应用,希望读者能够从中受益,并在实际项目中有效地运用多线程技术。 #### 推荐资源 最后,推荐了一些学习多线程编程的资源,包括书籍、在线教程等,供有兴趣进一步深入...
在iOS开发中,多线程是一项至关重要的技术,它能够帮助开发者实现应用程序的高效运行和流畅的用户体验。本文将深入探讨“iOS多线程Demo”所体现的核心知识点,并结合实际应用进行详细阐述。 首先,我们要了解多线程...
### iOS线程管理 #### 线程同步与互斥 - **线程锁(`NSLock`)**: 用于保护共享资源不被同时访问,确保数据的一致性。示例代码中定义了一个`NSLock`类型的属性`lock`,用于保护对`totalTickets`变量的访问。 #### ...
在探讨iOS多线程的面试题目时,我们首先要明确进程和线程的定义及其关系。进程可以被理解为计算机上一次执行活动的程序,它是操作系统分配资源的基本单元,拥有独立的内存空间和运行所需的全部资源。当我们提到一个...
在iOS开发中,多线程是一项至关重要的技术,它能够使应用程序在后台执行任务,同时保持用户界面的响应。本文将深入探讨iOS多线程的运用,通过分析提供的3个Demo,来帮助开发者更好地理解和应用多线程。 一、基础...
iOS多线程编程指南所涉及的知识点涵盖了多线程编程在iOS平台的应用,包括线程概念、线程管理、RunLoop对象、线程同步等核心概念以及具体实现技术。鉴于文档内容丰富,这里将详细解读并阐述上述知识点。 ### 1. 线程...
在iOS开发中,多线程是一项基础且重要的技术,它能让我们实现应用程序的并行处理,提高用户体验。本文将深入探讨“iOS常驻线程”的概念、如何创建以及其与POSIX、NSThread和GCD的关系。 首先,我们来解释什么是...