`

iPhone 多线程

阅读更多

iPhone 多线程

  多线程在各种编程语言中都是难点,很多语言中实现起来很麻烦,objective-c虽然源于c,但其多线程编程却相当简单,可以与java相媲美。这篇文章主要从线程创建与启动、线程的同步与锁、线程的交互、线程池等等四个方面简单的讲解一下iphone中的多线程编程。

 

  一、线程创建与启动

     线程创建主要有二种方式:

                  - (id)init; // designated initializer

                  - (id)initWithTarget:(id)target selector:(SEL)selector object:(id)argument;

 

  当然,还有一种比较特殊,就是使用所谓的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

 

  @interface SellTicketsAppDelegate : NSObject {

  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];

  }

分享到:
评论
2 楼 jessige_27 2010-12-15  
“一、线程创建与启动”
看到“二”了也不知道你在说那个类 ;p
1 楼 paopaosa 2010-09-05  
objc也有@synchronized

相关推荐

    iphone 多线程

    在iOS开发中,多线程是一项至关重要的技术,它使得应用程序能够同时执行多个任务,提升用户体验,特别是对于iPhone这样的移动设备来说,优化性能和响应速度是开发者必须关注的重点。本篇将详细介绍iPhone开发中的多...

    iphone多线程编程

    ### iPhone多线程编程知识点详解 #### 一、引言 在iPhone开发中,多线程编程是一项重要的技术。为了提高应用性能与响应性,合理地利用多线程可以显著提升用户体验。本篇将深入探讨iOS环境下的多线程概念、实现方法...

    iPhone 多线程 CoreData使用源代码

    在iOS开发中,多线程是一项...总之,理解iPhone多线程与CoreData的结合使用是提高iOS应用性能的关键。掌握正确的线程管理和数据操作实践,不仅可以提升用户体验,还能避免潜在的并发问题,确保应用的稳定性和可靠性。

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

    这份"iOS iPhone多线程编程指南"详细讲解了如何在iPhone平台上有效地进行多线程操作,对于iOS开发者来说是一份宝贵的资源。以下是该指南可能涵盖的关键知识点: 1. **基础概念**:首先,指南会介绍多线程的基本概念...

    iphone多线程下载demo

    "iPhone多线程下载demo"是一个展示如何在iOS应用中实现多线程下载文件的实例。这个小例子旨在帮助开发者理解并实践多线程下载的原理和方法。 多线程下载通常涉及网络请求、后台处理和文件保存等多个步骤。在iOS中,...

    iphone多线程编程指南

    ### iPhone多线程编程指南知识点解析 #### 一、多线程编程概述 **1.1 什么是多线程** 多线程是指在一个程序中同时运行多个代码路径的能力。这使得程序可以在执行某些任务的同时处理其他任务,从而提高程序的整体...

    关于Iphone多线程和UDP协议

    UITableView,ToolBar,Navigation 页面设计。。。

    iphone开发多线程

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

    iphone MP3多线程下载 歌曲分类 数据库保存 播放软件

    在开发一款针对iPhone的音乐应用时,实现"iphone MP3多线程下载 歌曲分类 数据库保存 播放软件"涉及到多个关键的技术环节。首先,我们要关注的是多线程下载技术,这是提高下载效率和用户体验的重要手段。 1. **多...

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

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

    Iphone下多线程的开发

    ### IPhone下多线程的开发 随着移动设备性能的不断提升以及用户对应用程序功能和响应速度的要求越来越高,多线程编程已经成为iOS应用开发中的一个重要组成部分。本文将从以下几个方面详细介绍在iPhone下进行多线程...

    iOS多线程网络请求,多线程下载图片

    本文将深入探讨如何在iPhone开发中利用多线程进行网络请求和图片下载。 首先,我们来看一下标题中的“多线程网络请求”。在iOS中,网络请求通常采用URLSession进行,它提供了异步处理能力,可以在后台线程中执行,...

    多线程.rar

    本文将深入探讨在iPhone开发中使用Object-C实现多线程的相关知识点。 一、多线程基础 1. 主线程:主线程是应用的入口,负责处理UI更新和用户交互。为了保证界面的流畅,所有的UI操作应该在主线程上进行。 2. 工作...

    iphone中线程的使用

    综上所述,iPhone中线程的使用涉及到多线程技术的选择、线程安全的保障以及合理利用GCD进行任务调度。熟练掌握这些知识点,对于编写高效、稳定的iOS应用至关重要。通过实际操作和实践,你可以更好地理解和运用这些...

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

    《Objective-C高级编程:iOS与OS X多线程和内存管理》是一本深入探讨Objective-C在iOS和OS X平台上的核心特性的书籍。本书重点聚焦于多线程和内存管理两个关键领域,对于iOS和macOS应用开发人员来说,这是理解和优化...

    iOS多线程编程指南

    ### iOS多线程编程指南 #### 一、引言与多线程概念 随着计算机硬件技术的发展,现代设备越来越依赖于多核处理器来提高性能。为了充分利用这些硬件资源,iOS应用开发者需要掌握多线程编程技术。多线程能够使应用在...

    iOS 开发 之 多线程总结

    本文将对多线程进行深入总结,主要涵盖线程的基本概念、使用多线程的原因以及在iPhone平台上创建和管理线程的几种方法。 一、线程简介 线程是操作系统分配CPU时间的基本单位,它可以看作是程序执行流的最小单元。...

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

    ### iOS多线程编程技术详解:NSThread、Cocoa NSOperation、GCD #### 一、多线程基本概念 1. **进程**:在移动设备(如iPhone)上,每一个应用程序都可以被视为一个独立的进程。每个进程都会有一个主线程(main ...

Global site tag (gtag.js) - Google Analytics