- 浏览: 1341305 次
- 性别:
- 来自: 成都
-
文章分类
- 全部博客 (471)
- 原创文章 (4)
- Database (84)
- J2SE (63)
- Web (26)
- Javascript (30)
- Lucene (11)
- os (13)
- 算法 (8)
- Webservice (1)
- Open projects (18)
- Hibernate (18)
- Spring (15)
- Css (2)
- J2ee (2)
- 综合技术 (18)
- 安全管理 (13)
- PatternsInJava (27)
- NIO (5)
- Ibatis (2)
- 书籍收藏 (1)
- quartz (7)
- 并发编程 (15)
- oracle问题 (2)
- ios (60)
- coco2d-iphone (3)
- C++ (6)
- Zookeeper (2)
- golang (4)
- animation (2)
- android (1)
最新评论
-
dandingge123:
【引用】限制UITextField输入长度的方法 -
qja:
...
对List顺序,逆序,随机排列实例代码 -
安静听歌:
现在在搞这个,,,,,哎~头都大了,,,又freemarker ...
通用大型网站页面静态化解决方案(一) -
springdata-jpa:
java quartz定时任务demo教程源代码下载,地址:h ...
Quartz 配置参考 -
马清天:
[b][/b][list][*]引用[u][/u][/list ...
通用大型网站页面静态化解决方案(一)
iphone多线程
这篇文章主要从线程创建与启动、线程的同步与锁、线程的交互、线程池等等四个方面简单的讲解一下iphone中的多线程编程。
AD:
不管是iphone中还是其他的操作系统,多线程在各种编程语言中都是难点,很多语言中实现起来很麻烦,objective-c虽然源于c,但其多线程编程却相当简单,可以与java相媲美。多线程编程是防止主线程堵塞,增加运行效率等等的最佳方法。而原始的多线程方法存在很多的毛病,包括线程锁死等。
一、线程创建与启动
线程创建主要有二种方式:
1. (id)init; // designated initializer
2. (id)initWithTarget:(id)target selector:
3. (SEL)selector object:(id)argument;
当然,还有一种比较特殊,就是使用所谓的convenient method,这个方法可以直接生成一个线程并启动它,而且无需为线程的清理负责。这个方法的接口是:
1. (void)detachNewThreadSelector:
2. (SEL)aSelector toTarget:
3. (id)aTarget withObject:
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. @interface SellTicketsAppDelegate : NSObject <UIApplicationDelegate> {
4. int tickets;
5. int count;
6. NSThread* ticketsThreadone;
7. NSThread* ticketsThreadtwo;
8. NSCondition* ticketsCondition;
9. UIWindow *window;
10. }
11. @property (nonatomic, retain) IBOutlet UIWindow *window;
12. @end
13. SellTicketsAppDelegate.m 文件
14. // SellTicketsAppDelegate.m
15. import "SellTicketsAppDelegate.h"
16. @implementation SellTicketsAppDelegate
17. @synthesize window;
18. - (void)applicationDidFinishLaunching:(UIApplication *)application {
19. tickets = 100;
20. count = 0;
21. // 锁对象
22. ticketCondition = [[NSCondition alloc] init];
23. ticketsThreadone = [[NSThread alloc] initWithTarget:self selector:@selector(run) object:nil];
24. [ticketsThreadone setName:@"Thread-1"];
25. [ticketsThreadone start];
26. ticketsThreadtwo = [[NSThread alloc] initWithTarget:self selector:@selector(run) object:nil];
27. [ticketsThreadtwo setName:@"Thread-2"];
28. [ticketsThreadtwo start];
29. //[NSThread detachNewThreadSelector:@selector(run) toTarget:self withObject:nil];
30. // Override point for customization after application launch
31. [window makeKeyAndVisible];
32.
33. }
34.
35. - (void)run{
36. while (TRUE) {
37. // 上锁
38. [ticketsCondition lock];
39. if(tickets > 0){
40. [NSThread sleepForTimeInterval:0.5];
41. count = 100 - tickets;
42. NSLog(@"当前票数是:%d,售出:%d,线程名:%@",tickets,count,[[NSThread currentThread] name]);
43. tickets--;
44. }else{
45. break;
46. }
47. [ticketsCondition unlock];
48. }
49. }
50. - (void)dealloc {
51. [ticketsThreadone release];
52. [ticketsThreadtwo release];
53. [ticketsCondition release];
54. [window release];
55. [super dealloc];
56. }
57. @end
三、线程的交互
线程在运行过程中,可能需要与其它线程进行通信,如在主线程中修改界面等等,可以使用如下接口:
1. (void)performSelectorOnMainThread:
2. (SEL)aSelector withObject:
3. (id)arg waitUntilDone:
4. (BOOL)wait
由于在本过程中,可能需要释放一些资源,则需要使用NSAutoreleasePool来进行管理,如:
1. (void)startTheBackgroundJob {
2. NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
3. // to do something in your thread job
4. ...
5. [self performSelectorOnMainThread:@selector(makeMyProgressBarMoving) withObject:nil waitUntilDone:NO];
6. [pool release];
7. }
小结:
对于多线程,在一个程序中,一些独立运行的程序片断叫作线程,利用它编程的概念就叫作多线程处理。多线程处理一个常见的例子就是用户界面。利用线程,用户可按下一个按钮,然后程序会立即作出响应,而不是让用户等待程序完成了当前任务以后才开始响应
发表评论
-
ios 声音合成
2013-08-18 13:20 1308http://stackoverflow.com/ques ... -
__bridge,__bridge_retained和__bridge_transfer的意思,区别与使用 20 三
2012-12-24 01:41 1735使用ARC能帮我们减轻不少内存管理方面的负担,尤其是对用 ... -
CAAnimation
2012-12-23 01:09 2368CAAnimation采用了CAMediaTi ... -
UIViewAnimation动画与Core Animation的CATransition类动画
2012-12-23 01:06 2774使用UIView类函数实现://U ... -
GCD实战2:资源竞争
2012-12-23 01:04 1617转自http://www.dreamingwish.co ... -
GCD实战一:使用串行队列实现简单的预加载
2012-12-22 17:10 2941转自 http://www.dreamingwish.c ... -
GCD介绍(四): 完结
2012-12-22 17:08 1439转自 http://www.dreamingwish.c ... -
GCD介绍(三): Dispatch Sources
2012-12-22 17:07 1681转自 http://www.dreamingwish.com/ ... -
GCD介绍(二): 多核心的性能
2012-12-22 17:05 1230转自http://www.dreamingwish.co ... -
基本概念和Dispatch Queue
2012-12-22 17:03 1422转自 http://www.dreamingwish.c ... -
Best Audio Format for iPhone Audio Programming
2012-12-19 16:26 2612I had never done audio p ... -
LAME 是一个开源的MP3解码编码工具
2012-12-19 13:09 8653MP3 Encoding * 编码MP3文件必须按如下 ... -
sqlite3中的数据类型
2012-12-10 21:37 1360(转)http://www.cnblogs.com/kfqco ... -
ios随机数,and()、random()、arc4random()
2012-11-15 11:06 4746原文:http://bj007.blog.51cto.c ... -
IPHONE GIF 播放的方式
2012-10-11 18:30 1475转 http://blog.csdn.net/zltia ... -
在新线程中使用NSTimer
2012-10-11 18:21 1604转自 http://blog.csdn.net/sjzs ... -
Creating an iPhone Daemon – Part 5
2012-09-02 15:29 1550Creating an iPhone Daemon – ... -
Creating an iPhone Daemon – Part 4
2012-09-02 15:28 1419Creating an iPhone Daemon – ... -
Creating an iPhone Daemon – Part 3
2012-09-02 15:25 1518This is part three of the bl ... -
Creating an iPhone Daemon – Part 2
2012-09-02 15:24 1273Here is part two of the blog ...
相关推荐
在iOS开发中,多线程是一项至关重要的技术,它使得应用程序能够同时执行多个任务,提升用户体验,特别是对于iPhone这样的移动设备来说,优化性能和响应速度是开发者必须关注的重点。本篇将详细介绍iPhone开发中的多...
### iPhone多线程编程知识点详解 #### 一、引言 在iPhone开发中,多线程编程是一项重要的技术。为了提高应用性能与响应性,合理地利用多线程可以显著提升用户体验。本篇将深入探讨iOS环境下的多线程概念、实现方法...
在iOS开发中,多线程是一项...总之,理解iPhone多线程与CoreData的结合使用是提高iOS应用性能的关键。掌握正确的线程管理和数据操作实践,不仅可以提升用户体验,还能避免潜在的并发问题,确保应用的稳定性和可靠性。
这份"iOS iPhone多线程编程指南"详细讲解了如何在iPhone平台上有效地进行多线程操作,对于iOS开发者来说是一份宝贵的资源。以下是该指南可能涵盖的关键知识点: 1. **基础概念**:首先,指南会介绍多线程的基本概念...
"iPhone多线程下载demo"是一个展示如何在iOS应用中实现多线程下载文件的实例。这个小例子旨在帮助开发者理解并实践多线程下载的原理和方法。 多线程下载通常涉及网络请求、后台处理和文件保存等多个步骤。在iOS中,...
### iPhone多线程编程指南知识点解析 #### 一、多线程编程概述 **1.1 什么是多线程** 多线程是指在一个程序中同时运行多个代码路径的能力。这使得程序可以在执行某些任务的同时处理其他任务,从而提高程序的整体...
iPhone 多线程 多线程在各种编程语言中都是难点,很多语言中实现起来很麻烦,objective-c虽然源于c,但其多线程编程却相当简单,可以与java相媲美。这篇文章主要从线程创建与启动、线程的同步与锁、线程的交互、...
UITableView,ToolBar,Navigation 页面设计。。。
本文将深入探讨“iPhone开发多线程”这一主题,基于提供的描述和标签,我们将关注iOS平台上的多线程概念、实现方式以及一个名为“ThreadSyncSample”的示例项目。 首先,我们需要理解什么是多线程。在单线程环境中...
在开发一款针对iPhone的音乐应用时,实现"iphone MP3多线程下载 歌曲分类 数据库保存 播放软件"涉及到多个关键的技术环节。首先,我们要关注的是多线程下载技术,这是提高下载效率和用户体验的重要手段。 1. **多...
在“iPhone开发之多线程入门示例程序”中,我们主要会接触到苹果的Foundation框架中的多线程解决方案,包括NSThread、NSOperation和GCD(Grand Central Dispatch)。 首先,NSThread是Objective-C中的一个类,它...
### IPhone下多线程的开发 随着移动设备性能的不断提升以及用户对应用程序功能和响应速度的要求越来越高,多线程编程已经成为iOS应用开发中的一个重要组成部分。本文将从以下几个方面详细介绍在iPhone下进行多线程...
本文将深入探讨如何在iPhone开发中利用多线程进行网络请求和图片下载。 首先,我们来看一下标题中的“多线程网络请求”。在iOS中,网络请求通常采用URLSession进行,它提供了异步处理能力,可以在后台线程中执行,...
本文将深入探讨在iPhone开发中使用Object-C实现多线程的相关知识点。 一、多线程基础 1. 主线程:主线程是应用的入口,负责处理UI更新和用户交互。为了保证界面的流畅,所有的UI操作应该在主线程上进行。 2. 工作...
综上所述,iPhone中线程的使用涉及到多线程技术的选择、线程安全的保障以及合理利用GCD进行任务调度。熟练掌握这些知识点,对于编写高效、稳定的iOS应用至关重要。通过实际操作和实践,你可以更好地理解和运用这些...
《Objective-C高级编程:iOS与OS X多线程和内存管理》是一本深入探讨Objective-C在iOS和OS X平台上的核心特性的书籍。本书重点聚焦于多线程和内存管理两个关键领域,对于iOS和macOS应用开发人员来说,这是理解和优化...
### iOS多线程编程指南 #### 一、引言与多线程概念 随着计算机硬件技术的发展,现代设备越来越依赖于多核处理器来提高性能。为了充分利用这些硬件资源,iOS应用开发者需要掌握多线程编程技术。多线程能够使应用在...
本文将对多线程进行深入总结,主要涵盖线程的基本概念、使用多线程的原因以及在iPhone平台上创建和管理线程的几种方法。 一、线程简介 线程是操作系统分配CPU时间的基本单位,它可以看作是程序执行流的最小单元。...
### iOS多线程编程技术详解:NSThread、Cocoa NSOperation、GCD #### 一、多线程基本概念 1. **进程**:在移动设备(如iPhone)上,每一个应用程序都可以被视为一个独立的进程。每个进程都会有一个主线程(main ...