首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网络技术 > 网络基础 >

performSelectorOnMainThread 跟detachNewThreadSelector区别

2012-07-04 
performSelectorOnMainThread 和detachNewThreadSelector区别.举例说明怎么简单的创建一个子线程。用到的类

performSelectorOnMainThread 和detachNewThreadSelector区别.

举例说明怎么简单的创建一个子线程。用到的类是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; }

热点排行