`

iphone开发-多线程

阅读更多

举例说明怎么简单的创建一个子线程。

用到的类是NSThread类,这里使用detachNewTheadSelector:toTagaet:withObject创建一个线程。

函数setupThread:(NSArray*)userInfor。通过userInfor将需要的数据传到线程中。

函数定义:

-(void )setupThread:(NSArray*)userInfor{

[NSThread detachNewThreadSelector:@selector(threadFunc:) toTarget:self withObject:(id)userInfor];

}

- (void )threadFunc:(id)userInfor{

NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];

//。。。。需要做的处理。

//这里线程结束后立即返回

[self performSelectorOnMainThread:@selector(endThread) withObject:nil waitUntilDone:NO];

[pool release];

}

performSelectorOnMainThread通知主线程执行函数endThread。也可以使用performSelector:onThread:withObject:waitUntil 通知某线程执行线程结束后的处理。

线程内不要刷新界面。如果需要刷新界面,通过performSelectorOnMainThread,调出主线程中的方法去刷新。

例如,启动一个线程下载图片:

//启动线程

[NSThread detachNewThreadSelector:@selector(downloadImage:) toTarget:self withObject:url];

//线程函数

- (void) downloadImage:(NSString *)url{

_subThreed = [NSThread currentThread];

self.uploadPool = [[NSAutoreleasePool alloc] init];
self.characterBuffer = [NSMutableData data];
done = NO;
[[NSURLCache sharedURLCache] removeAllCachedResponses];

NSMutableURLRequest *theRequest = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:url]];

self.connection = [[NSURLConnection alloc] initWithRequest:theRequest delegate:self];
[self performSelectorOnMainThread:@selector(httpConnectStart) withObject:nil waitUntilDone:NO];
if (connection != nil) {
do {
[[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate distantFuture]];
} while (!done);
}

self.photo = [UIImage imageWithData:characterBuffer];

//下载结束,刷新
[self performSelectorOnMainThread:@selector(fillPhoto) withObject:nil waitUntilDone:NO];

// Release resources used only in this thread.
self.connection = nil;
[uploadPool release];
self.uploadPool = nil;

_subThreed = nil;
}


#pragma mark NSURLConnection Delegate methods

/*
Disable caching so that each time we run this app we are starting with a clean slate. You may not want to do this in your application.
*/

- (NSCachedURLResponse *)connection:(NSURLConnection *)connection willCacheResponse:(NSCachedURLResponse *)cachedResponse {

return nil;
}

// Forward errors to the delegate.
- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error {
done = YES;
[self performSelectorOnMainThread:@selector(httpConnectEnd) withObject:nil waitUntilDone:NO];
[characterBuffer setLength:0];

}

// Called when a chunk of data has been downloaded.
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {
// Process the downloaded chunk of data.

[characterBuffer appendData:data];

}

- (void)connectionDidFinishLoading:(NSURLConnection *)connection {

[self performSelectorOnMainThread:@selector(httpConnectEnd) withObject:nil waitUntilDone:NO];
// Set the condition which ends the run loop.
done = YES;
}

分享到:
评论

相关推荐

    iPhone开发--游戏手柄

    8. **多线程编程**:为了保证游戏的流畅性,通常会在后台线程处理游戏逻辑,主线程则负责用户界面的更新。这需要理解GCD(Grand Central Dispatch)或Operation Queues来协调工作。 9. **性能优化**:在处理手柄...

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

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

    iphone开发多线程

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

    Iphone下多线程的开发

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

    iphone 多线程

    本篇将详细介绍iPhone开发中的多线程,特别是NSThread和NSInvocationOperation的使用。 **一、多线程基础** 在iOS中,多线程主要包括以下几种实现方式: 1. **NSThread**:这是Objective-C中直接对线程进行操作的...

    iphone开发--UITableView中的cell高度不一致解决方案

    在iOS开发中,UITableView...参考博文链接提供的内容,会有更多关于这个话题的深入讨论和实例代码,帮助你更好地理解和解决此类问题。在项目中,记得根据实际情况灵活应用这些解决方案,以提供更流畅、美观的用户体验。

    iphone多线程编程

    在iPhone开发中,多线程编程是一项重要的技术。为了提高应用性能与响应性,合理地利用多线程可以显著提升用户体验。本篇将深入探讨iOS环境下的多线程概念、实现方法以及常见问题。 #### 二、基础概念 **1. 什么是...

    iOS 开发 之 多线程总结

    iOS开发中的多线程技术是提升应用性能和用户体验的关键,特别是在处理耗时操作时,如网络请求、数据计算或大文件上传。本文将对多线程进行深入总结,主要涵盖线程的基本概念、使用多线程的原因以及在iPhone平台上...

    iPhone3开发基础教程

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

    iphone开发指南-精彩章节

    《iPhone开发指南》是iOS应用开发者的入门宝典,它涵盖了从基础到进阶的各种知识点。这份资料包含的精彩章节包括第八章、第十二章和第一章。这些章节分别聚焦于不同的核心主题,对于理解iPhone应用开发的基础和关键...

    IPhone Objective-C入门

    - **多线程**:Objective-C提供了多种机制来支持多线程编程,这对于提高应用程序的性能非常重要。 #### 八、实践案例 《Objective-C for Absolute Beginners》包含了一系列实用的示例项目,通过这些项目,读者可以...

    多线程.rar

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

    3G手机开发-WiMAX技术交流-iPhone开发英文资

    此外,还需要掌握网络编程、数据库管理、多线程等技能,以实现功能丰富的应用。 在3G手机开发与WiMAX技术交流中,可能涉及的话题包括: 1. **WiMAX网络架构**:WiMAX网络的组成包括基站(BS)、移动站(MS)和核心...

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

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

    cocos2d-iphone-2.0.tar.gz

    11. **Performance Improvements**:Cocos2d-iPhone 2.0在性能上做了大量优化,包括更快的渲染、内存管理和多线程支持。 12. **Multitouch Support**:针对iOS设备的多点触控特性,Cocos2d-iPhone提供了易于使用的...

    iphone多线程下载demo

    在iOS开发中,多线程是一项关键的技术,它能让应用程序在执行多个任务时保持流畅,不会因为某个耗时操作阻塞主线程导致用户界面卡顿。"iPhone多线程下载demo"是一个展示如何在iOS应用中实现多线程下载文件的实例。这...

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

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

    iPhone开发基础教程&Objective-C.2.0程序设计

    在IT行业中,iOS应用开发是一项高需求的技能,而学习这一领域的基础往往从掌握Objective-C.2.0和iPhone开发开始。"iPhone开发基础教程&Objective-C.2.0程序设计"是为初学者量身定制的学习资源,旨在帮助他们踏入这个...

    iPhone 多线程 CoreData使用源代码

    在iOS开发中,多线程是一项关键技能,特别是在处理数据密集型任务时,如使用CoreData框架进行数据库操作。CoreData是Apple提供的一种对象图管理器,用于存储和检索应用程序的数据。然而,由于主线程主要负责用户界面...

Global site tag (gtag.js) - Google Analytics