`
luckliu521
  • 浏览: 258772 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

解析iphone多线程

 
阅读更多
解析iphone多线程
2011-06-02 17:27 佚名 互联网 我要评论(0) 字号:T | T

这篇文章主要从线程创建与启动、线程的同步与锁、线程的交互、线程池等等四个方面简单的讲解一下iphone中的多线程编程。
AD:
不管是iphone中还是其他的操作系统,多线程在各种编程语言中都是难点,很多语言中实现起来很麻烦,objective-c虽然源于c,但其多线程编程却相当简单,可以与java相媲美。多线程编程是防止主线程堵塞,增加运行效率等等的最佳方法。而原始的多线程方法存在很多的毛病,包括线程锁死等。

一、线程创建与启动

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

(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 
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]; 
}
小结:

对于多线程,在一个程序中,一些独立运行的程序片断叫作线程,利用它编程的概念就叫作多线程处理。多线程处理一个常见的例子就是用户界面。利用线程,用户可按下一个按钮,然后程序会立即作出响应,而不是让用户等待程序完成了当前任务以后才开始响应
  • 大小: 66.4 KB
  • 大小: 35.4 KB
  • 大小: 156.9 KB
  • 大小: 33.7 KB
分享到:
评论

相关推荐

    iphone多线程编程指南

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

    多线程.rar

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

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

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

    iphone 解析XML的demo

    6. **GCD (Grand Central Dispatch)**: 为了提高性能和用户体验,可能将XML解析放在后台线程进行,利用GCD异步处理任务,避免阻塞主线程。 7. **网络请求**:如果XML数据是从服务器获取的,那么可能使用URLSession...

    show-view.zip_DEMO_iphone xml

    综上所述,这个"show-view.zip_DEMO_iphone xml"实例涵盖了XML解析、多线程和页面旋转三大知识点。通过学习和研究这个DEMO,开发者可以深化对这些技术的理解,提升在iOS平台上构建高效、响应迅速的应用的能力。同时...

    115过期文件解析工具.rar

    3. **多线程下载**:为了提高下载效率,工具可能支持多线程下载,使得大文件的下载速度得到显著提升。 4. **免费使用**:根据提供的标签信息,这款工具是免费提供的,用户无需支付任何费用就能使用其服务,对于经常...

    iPhone3开发基础教程

    - **多线程与后台任务**:教授如何实现多线程编程,处理后台任务,如下载、上传等,同时保持应用的响应性。 - **多媒体应用开发**:涵盖如何使用AVFoundation框架进行音频和视频的播放与录制,以及如何处理图像和...

    iPhone QQ协议源码

    《深入解析iPhone QQ协议源码》 iPhone QQ协议源码是许多iOS开发者梦寐以求的技术资源,尤其对于那些热衷于即时通讯应用开发的程序员来说,它的重要性不言而喻。QQ作为中国最大的社交平台之一,其在移动设备上的...

    the iphone developer,s

    6. **多线程与性能优化**:iOS开发中,多线程管理和性能优化是提高用户体验的关键,本书会介绍Grand Central Dispatch(GCD)、Operation和Queue,以及内存管理技巧。 7. **动画与图形处理**:利用Core Animation和...

    More iPhone 3 Development Tackling iPhone SDK 3

    这本书旨在帮助开发者提升在iPhone平台上的应用开发技能,涵盖了从基础到高级的各种主题,包括界面设计、性能优化、网络编程、多线程以及游戏开发等关键知识点。 1. **iPhone SDK 3概述**:iPhone SDK 3是苹果为...

    iPhoneQQ在线源码

    3. **多线程**:为了保证用户体验,源码会利用GCD(Grand Central Dispatch)或者NSOperationQueue来实现异步网络请求,避免UI阻塞。 4. **推送通知**:iPhoneQQ可能会集成苹果的PushKit或UserNotifications框架,...

    Head-First iphone development

    - **Grand Central Dispatch (GCD)**:用于执行异步任务和管理多线程的框架,提高应用的响应性和效率。 - **Operation Queues**:另一种处理异步任务的方式,提供更高级别的抽象和控制。 #### 7. **测试与调试** ...

    30天精通iPhone手机编程+实例iPhone SDK编程入门教程.rar

    最后阶段会介绍一些高级主题,如多线程、闭包、GCD(Grand Central Dispatch)以及单元测试。完成应用程序后,你将学习如何进行真机测试、App Store Connect的设置,以及提交你的第一个App到App Store进行审核和发布...

    卡iPhoneQQ源码

    2. **适配iOS**:由于是针对iPhone,源码可能涉及到对iOS系统的特定优化,比如利用多线程技术处理后台任务,避免阻塞主线程导致界面卡顿,或者使用iOS的特定API进行硬件加速。 3. **错误修复**:源码可能包含了对...

    iphone UDP 聊天例子

    6. **多线程**:由于网络操作通常在后台线程执行,我们需要确保UI更新是安全的。可以使用`dispatch_async`(Objective-C)或`DispatchQueue.main.async`(Swift)来在主线程上更新界面。 7. **错误处理**:处理可能...

    易语言iPhone+QQ在线

    通过分析《易语言iPhone+QQ在线》的源码,开发者可以深入学习到易语言与其他技术的结合,如iOS接口集成、网络通信、多线程编程等。同时,这也是一次了解如何利用易语言实现跨平台应用开发的实践机会。对于希望提升跨...

    iphone无线条形码PC端

    4. **支持多线程应用程序**:多线程技术意味着程序可以同时处理多个任务,提高效率。在这种情况下,可能指的是在读取或解析多个条码时,程序不会出现卡顿或延迟,确保了高效的数据处理能力。 结合“条形码PC端”的...

    iPhone开发秘籍(The iphone developer cookbook)(第2版)(英文版)

    - **多线程编程**:深入探讨Grand Central Dispatch(GCD)和NSOperationQueue的使用,实现高效的并发编程。 ### 结论 《iPhone开发秘籍(The iPhone Developer Cookbook)(第2版)(英文版)》是一本内容丰富、覆盖广泛...

Global site tag (gtag.js) - Google Analytics