`
lifaming15
  • 浏览: 64778 次
  • 来自: ...
文章分类
社区版块
存档分类

解析iphone多线程

 
阅读更多

不管是iphone 中还是其他的操作系统,多线程在各种编程语言中都是难点,很多语言中实现起来很麻烦,objective-c虽然源于c,但其多线程编程却相当简单,可以与java 相媲美。多线程编程是防止主线程堵塞,增加运行效率等等的最佳方法。而原始的多线程方法存在很多的毛病,包括线程锁死等。

一、线程创建与启动

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

  1. (id)init;//designatedinitializer
  2. (id)initWithTarget:(id)targetselector:
  3. (SEL)selectorobject:(id)argument;

当然,还有一种比较特殊,就是使用所谓的convenient method,这个方法可以直接生成一个线程并启动它,而且无需为线程的清理负责。这个方法的接口是:

  1. (void)detachNewThreadSelector:
  2. (SEL)aSelectortoTarget:
  3. (id)aTargetwithObject:
  4. (id)anArgument

前两种方法创建后,需要手机启动,启动的方法是:

  1. (void)start;

二、线程的同步与锁

要说明线程的同步与锁,最好的例子可能就是多个窗口同时售票的售票系统了。我们知道在java中,使用synchronized来同步,而iphone 虽 然没有提供类似java下的synchronized关键字,但提供了NSCondition对象接口。查看NSCondition的接口说明可以看 出,NSCondition是iphone下的锁对象,所以我们可以使用NSCondition实现iphone中的线程安全。这是来源于网上的一个例 子:

SellTicketsAppDelegate.h 文件

  1. //SellTicketsAppDelegate.h
  2. import < UIKit /UIKit.h >
  3. @interfaceSellTicketsAppDelegate:NSObject < UIApplicationDelegate > {
  4. inttickets;
  5. intcount;
  6. NSThread*ticketsThreadone;
  7. NSThread*ticketsThreadtwo;
  8. NSCondition*ticketsCondition;
  9. UIWindow*window;
  10. }
  11. @property(nonatomic,retain)IBOutletUIWindow*window;
  12. @end
  13. SellTicketsAppDelegate.m文件
  14. //SellTicketsAppDelegate.m
  15. import"SellTicketsAppDelegate.h"
  16. @implementationSellTicketsAppDelegate
  17. @synthesizewindow;
  18. -(void)applicationDidFinishLaunching:(UIApplication*)application{
  19. tickets = 100 ;
  20. count = 0 ;
  21. //锁对象
  22. ticketCondition =[[NSConditionalloc]init];
  23. ticketsThreadone =[[NSThreadalloc]initWithTarget:selfselector:@selector(run)object:nil];
  24. [ticketsThreadonesetName:@"Thread-1"];
  25. [ticketsThreadonestart];
  26. ticketsThreadtwo =[[NSThreadalloc]initWithTarget:selfselector:@selector(run)object:nil];
  27. [ticketsThreadtwosetName:@"Thread-2"];
  28. [ticketsThreadtwostart];
  29. //[NSThreaddetachNewThreadSelector:@selector(run)toTarget:selfwithObject:nil];
  30. //Overridepointforcustomizationafterapplicationlaunch
  31. [windowmakeKeyAndVisible];
  32. }
  33. -(void)run{
  34. while(TRUE){
  35. //上锁
  36. [ticketsConditionlock];
  37. if(tickets > 0){
  38. [NSThreadsleepForTimeInterval:0.5];
  39. count = 100 -tickets;
  40. NSLog(@"当前票数是:%d,售出:%d,线程名:%@",tickets,count,[[NSThreadcurrentThread]name]);
  41. tickets--;
  42. }else{
  43. break;
  44. }
  45. [ticketsConditionunlock];
  46. }
  47. }
  48. -(void)dealloc{
  49. [ticketsThreadonerelease];
  50. [ticketsThreadtworelease];
  51. [ticketsConditionrelease];
  52. [windowrelease];
  53. [superdealloc];
  54. }
  55. @end

三、线程的交互

线程在运行过程中,可能需要与其它线程进行通信,如在主线程中修改界面等等,可以使用如下接口:

  1. (void)performSelectorOnMainThread:
  2. (SEL)aSelectorwithObject:
  3. (id)argwaitUntilDone:
  4. (BOOL)wait

由于在本过程中,可能需要释放一些资源,则需要使用NSAutoreleasePool来进行管理,如:

  1. (void)startTheBackgroundJob{
  2. NSAutoreleasePool* pool =[[NSAutoreleasePoolalloc]init];
  3. //todosomethinginyourthreadjob
  4. ...
  5. [selfperformSelectorOnMainThread:@selector(makeMyProgressBarMoving)withObject:nilwaitUntilDone:NO];
  6. [poolrelease];
  7. }

小结:

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

分享到:
评论

相关推荐

    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平台上构建高效、响应迅速的应用的能力。同时...

    iPhone SDK示例代码解析

    多线程编程可以使应用更高效地利用硬件资源。 - **常用线程管理类**:`NSThread`和`NSOperationQueue`。 #### 13. 读取crash的日记文件 当应用崩溃时,会生成crash日志文件,这有助于开发者了解崩溃的原因。 - **...

    115过期文件解析工具.rar

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

    iPhone3开发基础教程

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

    the iphone developer,s

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

    iPhone QQ协议源码

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

    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