iphone开发-多线程

转载 2012年03月31日 09:09:07

from:http://yuxiang13115204.blog.163.com/blog/static/268020222009216105525111/


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

用到的类是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:[NSURLURLWithString: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开发秘籍(第2版)》中文版电子书

http://down.51cto.com/data/274307 《iPhone开发秘籍(第2版)》中文版电子书
  • binsoft
  • binsoft
  • 2014年09月11日 18:00
  • 1658

iphone开发-多线程

举例说明怎么简单的创建一个子线程。用到的类是NSThread类,这里使用detachNewTheadSelector:toTagaet:withObject创建一个线程。函数setupThread:(...
  • doubleuto
  • doubleuto
  • 2011年06月02日 22:39
  • 1707

如何使一个iPhone应用 - iPhone开发的秘密审查一个完整的分步应用程序开发课程

调试你的Xcode项目   6 - 如何创建很酷的用户界面生成器   7 - 创建简单的应用程序“Hello World”的使用Xcode   8 - 创建一个简单的基于导航的应用程序使用Xcode ...
  • Sifantuo
  • Sifantuo
  • 2014年07月09日 12:13
  • 342

[IOS]iphone开发之 - 启动页面设置

原文: http://www.cocoachina.com/bbs/read.php?tid=73570&fpage=2&page=2        不管是开发个人项目还是公司项目,大家通常都有...
  • horse20000
  • horse20000
  • 2012年05月02日 13:18
  • 11081

iphone开发视频教程汇总_斯坦福大学课程

由美国斯坦福大学(Stanford University)在2013年初推出的一套iPhone应用程序开发视频教程,详细讲解了iPhone4/iPhone4s/iPhone5/iPad等iOS平台终端...
  • xrl2012
  • xrl2012
  • 2015年03月02日 09:06
  • 344

iphone开发多线程介绍

不管是iphone中还是其他的操作系统,多线程在各种编程语言中都是难点,很多语言中实现起来很麻烦,objective-c虽然源于c,但其多线程编程却相当简单,可以与java相媲美。多线程编程是防止主线...
  • mawentao728
  • mawentao728
  • 2013年01月11日 09:28
  • 410

iphone图像裁剪功能实现

这两天在做图像剪裁功能。一致在尝试不同的解决方案,包括从cocoachina查找的资料创意,一直不满意最终的效果。经过2天努力,终于完美实现。 方案实现功能如下: 1、可拖拽、缩放选区,截取所选区...
  • lx31433
  • lx31433
  • 2015年05月04日 16:47
  • 289

iPhone开发【一】从HelloWorld开始

转载请注明出处,原文网址:http://blog.csdn.net/m_changgong/article/details/8013553 作者:张燕广 从经典的HelloWorld开始踏入iP...
  • m_changgong
  • m_changgong
  • 2012年09月24日 16:53
  • 20303

让不懂编程的人爱上iPhone开发(2017秋iOS11+Swift4+Xcode9版)-第3篇

点击上方“iOS开发”,选择“置顶公众号” 关键时刻,第一时间送达! 作者|王寒 应用的工作原理 在继续学习之前,让我们来了解一...
  • olsQ93038o99S
  • olsQ93038o99S
  • 2017年11月08日 00:00
  • 867

iPhone开发多线程使用与注意事项

iPhone开发多线程使用与注意事项是本文要介绍的内容,主要介绍一下iPhone SDK中多线程的使用方法以及注意事项。虽然现在大部分PC应用程序都支持多线程/多任务的开发方式,但是在iPhone上...
  • wishfly
  • wishfly
  • 2012年03月21日 01:36
  • 878
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:iphone开发-多线程
举报原因:
原因补充:

(最多只允许输入30个字)