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开发之多线程入门示例程序

  • 2012年08月18日 21:37
  • 582KB
  • 下载

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

iPhone开发多线程使用与注意事项是本文要介绍的内容,主要介绍一下iPhone SDK中多线程的使用方法以及注意事项。虽然现在大部分PC应用程序都支持多线程/多任务的开发方式,但是在iPhone上...
  • wishfly
  • wishfly
  • 2012年03月21日 01:36
  • 850

iphone开发多线程介绍

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

iphone开发使用NSThread和NSInvocationOperation实现多线程

多线程之NSInvocationOperation 多线程编程是防止主线程堵塞,增加运行效率等等的最佳方法。而原始的多线程方法存在很多的毛病,包括线程锁死等。在Cocoa中,Apple提供了NSOp...

iPhone开发进阶(11)--- 多线程的使用与注意事项

这一回,主要介绍一下iPhone SDK中多线程的使用方法以及注意事项。虽然现在大部分PC应用程序都支持多线程/多任务的开发方式,但是在iPhone上,Apple并不推荐使用多线程的编程方式。但是多线...

iphone开发中的多线程:NSThread、NSOperation、GCD

iOS 支持多个层次的多线程编程,层次越高的抽象程度越高,使用起来也越方便,也是苹果最推荐使用的方法。下面根据抽象层次从低到高依次列出iOS所支持的多线程编程范式: 1, NSThread; 2,...

iphone开发之多线程NSThread和NSInvocationOperation

http://www.cnblogs.com/lm3515/archive/2011/4/13.html 多线程之NSInvocationOperation 多线程编程是防止主线程堵塞,...

iPhone开发【十七】多线程开发之NSOperation&NSOperationQueue——异步下载图片

转载请注明出处,原文网址:http://blog.csdn.net/m_changgong/article/details/8238093 作者:张燕广 实现的功能:1)演示多线程NSOpe...

iPhone开发【十五】多线程开发之NSThread——异步下载图片

转载请注明出处,原文网址:http://blog.csdn.net/m_changgong/article/details/8220819  作者:张燕广 实现的功能:1)演示多线程NSTh...

iPhone开发【十四】多线程开发之NSThread——子线程模拟耗时操作

转载请注明出处,原文网址:http://blog.csdn.net/m_changgong/article/details/8213964  作者:张燕广 实现的功能:1)演示多线程开发。2...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:iphone开发-多线程
举报原因:
原因补充:

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