`
lizaochengwen
  • 浏览: 659552 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

多线程NSThread讲解

 
阅读更多
多线程在各种编程语言中都是难点,很多语言中实现起来很麻烦,objective-c虽然源于c,但其多线程编程却相当简单,可以与java相媲美。这篇文章主要从线程创建与启动、线程的同步与锁、线程的交互、线程池等等四个方面简单的讲解一下iphone中的多线程编程。 
一、线程创建与启动 
线程创建主要有二种方式: 
当然,还有一种比较特殊,就是使用所谓的convenient method,这个方法可以直接生成一个线程并启动它,而且无需为线程的清理负责。这个方法的接口是:  
+ (void)detachNewThreadSelector:(SEL)aSelector toTarget:(id)aTarget withObject:(id)anArgument 
前两种方法创建后,需要手机启动,启动的方法是: 
- (void)start; 
二、线程的同步与锁 
要说明线程的同步与锁,最好的例子可能就是多个窗口同时售票的售票系统了。我们知道在java中,使用synchronized来同步,而iphone虽然没有提供类似java下的synchronized关键字,但提供了NSCondition对象接口。查看NSCondition的接口说明可以看出,NSCondition是iphone下的锁对象,所以我们可以使用NSCondition实现iphone中的线程安全。这是来源于网上的一个例子: 
SellTicketsAppDelegate.h 文件 
//  SellTicketsAppDelegate.h 
import <UIKit/UIKit.h> 
  
@interface SellTicketsAppDelegate : NSObject <UIApplicationDelegate> { 
     int tickets; 
     int count; 
     NSThread* ticketsThreadone; 
     NSThread* ticketsThreadtwo; 
     NSCondition* ticketsCondition; 
     UIWindow *window; 

@property (nonatomic, retain) IBOutlet UIWindow *window; 
@end 
SellTicketsAppDelegate.m 文件 
//  SellTicketsAppDelegate.m 
import "SellTicketsAppDelegate.h" 
  
@implementation SellTicketsAppDelegate 
@synthesize window; 
  
- (void)applicationDidFinishLaunching:(UIApplication *)application { 
     tickets = 100; 
     count = 0; 
     // 锁对象 
     ticketCondition = [[NSCondition alloc] init]; 
     ticketsThreadone = [[NSThread alloc] initWithTarget:self selector:@selector(run) object:nil]; 
     [ticketsThreadone setName:@"Thread-1"]; 
     [ticketsThreadone start];   
  
  
     ticketsThreadtwo = [[NSThread alloc] initWithTarget:self selector:@selector(run) object:nil]; 
     [ticketsThreadtwo setName:@"Thread-2"]; 
     [ticketsThreadtwo start]; 
     //[NSThread detachNewThreadSelector:@selector(run) toTarget:self withObject:nil]; 
      // Override point for customization after application launch 
     [window makeKeyAndVisible];  
  

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

  
- (void)dealloc { 
    [ticketsThreadone release]; 
     [ticketsThreadtwo release]; 
     [ticketsCondition release];  
     [window release]; 
     [super dealloc]; 

@end 
三、线程的交互 
线程在运行过程中,可能需要与其它线程进行通信,如在主线程中修改界面等等,可以使用如下接口: 
- (void)performSelectorOnMainThread:(SEL)aSelector withObject:(id)arg waitUntilDone:(BOOL)wait 
由于在本过程中,可能需要释放一些资源,则需要使用NSAutoreleasePool来进行管理,如: 
- (void)startTheBackgroundJob { 
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; 
    // to do something in your thread job 
    ... 
    [self performSelectorOnMainThread:@selector(makeMyProgressBarMoving) withObject:nil waitUntilDone:NO]; 
    [pool release]; 

如果你什么都不考虑,在线程函数内调用 autorelease 、那么会出现下面的错误: 
NSAutoReleaseNoPool(): Object 0x********* of class NSConreteData autoreleased with no pool in place …. 
四、关于线程池,大家可以查看NSOperation的相关资料。 
原帖: http://www.voland.com.cn/iphone-in-the-multi-threaded-programming 
分享到:
评论

相关推荐

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

    本教程将重点讲解三种多线程技术:NSThread、NSOperation和GCD(Grand Central Dispatch),以及如何用它们来实现图片的异步加载。 首先,我们来看`NSThread`。`NSThread`是Apple提供的轻量级线程管理类,允许...

    iOS 多线程编程指南 pdf

    创建线程可以通过NSThread类,也可以使用POSIX的多线程技术,或者通过NSObject生成线程。此外,还可以使用其他技术创建线程,并介绍了在Cocoa程序中如何使用POSIX线程。 线程管理是多线程编程中的重要一环。文档第...

    iOS多线程编程指南

    文档提到了iOS平台上支持的多种多线程技术,比如使用NSThread类、POSIX线程以及Grand Central Dispatch(GCD)等。这些技术各有优势,在实际开发中,开发者需要根据应用需求选择合适的多线程方案。 文档详细讲解了...

    多线程编程指南

    ### 多线程编程指南 #### 简介与文档结构 本指南旨在为iOS开发者提供一个多线程编程的全面介绍。多线程是现代操作系统中的一个重要特性,它允许应用程序同时执行多个任务,从而提高效率并充分利用计算资源。在iOS...

    Objective-C高级编程 iOS与OS X多线程和内存管理_Objective-C_ios_

    本书主要围绕Objective-C语言在iOS和OS X操作系统上的应用,特别是针对多线程和内存管理这两个核心主题进行深入讲解。 在iOS和OS X开发中,多线程技术是提升应用程序性能和用户体验的关键。Objective-C提供了多种...

    iOS多线程编程之NSThread的使用案例

    iOS多线程编程之NSThread的使用案例源码,1、简介:1.1 iOS有三种多线程编程的技术,分别是:1.、NSThread 。2、Cocoa NSOperation (iOS多线程编程之NSOperation和NSOperationQueue的使用)3、GCD 全称:Grand ...

    iOS多线程示例

    本示例着重讲解了如何在iOS应用中实现多线程,以及如何管理临界区、资源池和进程,以确保程序的高效和稳定。 首先,我们要理解什么是多线程。在单线程系统中,程序按照顺序执行,而多线程则允许同时进行多个任务。...

    iOS iPhone多线程编程指南(中英文版本的两个pdf文件

    2. **NSThread**:苹果提供的NSThread类是实现多线程的一种方式,它允许开发者直接创建和管理线程。指南将详细介绍如何创建和启动线程,以及如何在线程间通信。 3. **GCD(Grand Central Dispatch)**:GCD是Apple...

    iphone多线程编程

    最后,"多线程编程指南.pdf"这本书可能详细讲解了这些概念和实践案例,包括如何有效使用GCD、NSThread、NSOperationQueue,以及如何解决线程安全问题,是初学者的宝贵资源。通过深入学习和实践,开发者能够掌握创建...

    多线程编程

    《IOS多线程编程指南》可能涵盖了NSThread的使用方法,如`NSThread`类的初始化和启动,以及如何在线程间共享数据。此外,还可能讲解了如何处理线程间的通信和同步问题,例如使用`NSLock`、`@synchronized`关键字、`...

    iOS并发编程指南与多线程编程指南合集

    这两份指南——《iOS并发编程指南》和《多线程编程指南》将深入讲解以上知识点,并通过实例帮助开发者更好地理解和运用到实际项目中。通过学习,开发者能够熟练掌握iOS平台上的并发编程技巧,提升应用的性能和用户...

    YXNSThreadLession:使用NSThread写的一个多线程,包含了NSThread的所有常用方法,可以用来详细学习NSThread

    ##通过使用NSThread类来讲解iOS中的多线程,创建了12个线程,来下载12张图片,而且把最后一个线程的优先级设置成最高,其他线程在最后一个线程执行完毕之后在执行 ##ViewController.m ###1.点击按钮下载的方法来开始...

    iOS开发多线程编程指南

    ### iOS开发多线程编程指南 #### 简介与文档结构 本指南旨在帮助iOS开发者深入了解多线程编程的概念、原理以及最佳实践。多线程编程是提高应用程序响应性和性能的关键技术之一,在iOS开发中尤其重要。通过合理地...

    NSBlockOperation多线程加载图片DemoNS

    本教程“NSBlockOperation多线程加载图片DemoNSThread并发教程共26页.pdf”深入讲解了如何利用NSBlockOperation结合NSThread进行图片的并发加载。 NSBlockOperation是苹果提供的一个Block操作类,它是NSOperation的...

    iOS NSThread和NSOperation的基本使用详解

    本文将深入讲解两种常见的多线程实现方式:NSThread和NSOperation。 首先,我们来看一下NSThread。NSThread是苹果提供的轻量级线程类,适合执行简单的、耗时较短的任务。它提供了两种启动新线程的方法: 1. `...

    核心动画、多线程编程、blocks编程要点、pdf 文件绝对能帮到你

    在iOS开发中,掌握核心动画(Core Animation)、多线程编程和Blocks的使用是至关重要的。这些技术不仅可以提升应用性能,还能实现丰富的用户界面和流畅的用户体验。 **1. 核心动画(Core Animation)** Core ...

    IOS多线程编程系类

    1.、NSThread2、CocoaNSOperation(IOS多线程编程之NSOperation和NSOperationQueue的使用)3、GCD全称:GrandCentralDispatch(IOS多线程编程之GrandCentralDispatch(GCD)介绍和使用)这三种编程方式从上到下,抽象...

    iOS Thread programming guide

    总之,这份官方文档为iOS开发者提供了关于多线程编程的全面指导,从基础知识到高级技巧,从理论到实践,都给出了详尽的讲解和示例。开发者通过阅读这份指南,可以有效地掌握在iOS环境下编写多线程程序的必备技能。

Global site tag (gtag.js) - Google Analytics