performSelectorOnMainThread 和detachNewThreadSelector区别_yongche_shi的博客-程序员宅基地

技术标签: performSelectorOnMai  ios  detachNewThreadSelec  

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

  2.   

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

  4.   

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

  6.   

  7. 函数定义:  

  8.   

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

  10.   

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

  12.   

  13. }  

  14.   

  15. - (void)threadFunc:(id)userInfor{  

  16.   

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

  18.   

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

  20.   

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

  22.   

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

  24.   

  25.   [pool release];  

  26.   

  27. }  

  28.   

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

  30.   

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

  32.   

  33.    

  34.   

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

  36.   

  37. //启动线程  

  38.   

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

  40.   

  41. //线程函数  

  42.   

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

  44.       

  45.     _subThreed = [NSThread currentThread];  

  46.       

  47.     self.uploadPool = [[NSAutoreleasePool alloc] init];  

  48.     self.characterBuffer = [NSMutableData data];  

  49.     done = NO;  

  50.     [[NSURLCache sharedURLCache] removeAllCachedResponses];  

  51.       

  52.     NSMutableURLRequest *theRequest = [NSMutableURLRequest requestWithURL:[NSURLURLWithString:url]];  

  53.       

  54.     self.connection = [[NSURLConnection alloc] initWithRequest:theRequest delegate:self];  

  55.     [self performSelectorOnMainThread:@selector(httpConnectStart) withObject:nil waitUntilDone:NO];  

  56.     if (connection != nil) {  

  57.         do {  

  58.             [[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate distantFuture]];  

  59.         } while (!done);  

  60.     }  

  61.       

  62.     self.photo = [UIImage imageWithData:characterBuffer];  

  63.       

  64.   

  65.     //下载结束,刷新  

  66.     [self performSelectorOnMainThread:@selector(fillPhoto) withObject:nil waitUntilDone:NO];  

  67.       

  68.     // Release resources used only in this thread.  

  69.     self.connection = nil;  

  70.     [uploadPool release];  

  71.     self.uploadPool = nil;  

  72.       

  73.     _subThreed = nil;  

  74. }  

  75.   

  76.   

  77.   

  78. #pragma mark NSURLConnection Delegate methods  

  79.   

  80. /* 

  81.  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. 

  82.  */  

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

  84.   

  85.     return nil;  

  86. }  

  87.   

  88. // Forward errors to the delegate.  

  89. - (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error {  

  90.     done = YES;  

  91.     [self performSelectorOnMainThread:@selector(httpConnectEnd) withObject:nil waitUntilDone:NO];  

  92.     [characterBuffer setLength:0];  

  93.       

  94. }  

  95.   

  96. // Called when a chunk of data has been downloaded.  

  97. - (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {  

  98.     // Process the downloaded chunk of data.  

  99.    

  100.     [characterBuffer appendData:data];  

  101.       

  102. }  

  103.   

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

  105.       

  106.     [self performSelectorOnMainThread:@selector(httpConnectEnd) withObject:nil waitUntilDone:NO];  

  107.     // Set the condition which ends the run loop.  

  108.     done = YES;   

  109. }  

转:http://blog.csdn.net/zhibudefeng/article/details/7677248

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/yongche_shi/article/details/24797785

智能推荐

【Linux】关于软件集Software Collections_HunterMichaelG的博客-程序员宅基地

CentOS/RHEL Linux 发行版以稳定性著称,所有的软件都要尽可能 stable,导致的一个结果就是基础软件的版本非常的低,比如 CentOS 6.7(15年发布) 中 gcc 版本还是 4.4.7(12年的版本)。这对开发来说就不是很友好,比如我们想用 C++ 11 中的某个特性,就必须自己编译一个高版本的 gcc 出来,但是这会有另外一个问题,开发环境不好维护,如果自己有多台电脑...

RedHat6.6更新Centos6yum源_weixin_30564785的博客-程序员宅基地

RedHat6.6更新Centos6yum源一、 删除自带的RedHat6.6yum源1- rpm -qa|grep yum|xargs rpm -e --nodeps(不检查依赖,直接删除rpm包)2- 检查是否删除干净rpm –qa|grep yum3- 下载新yum源wget http://mirrors.163.com/ce...

果园机器人的写作思路_《果园机器人》案例分析_abc在天明的博客-程序员宅基地

1/3小组合作,精心赏析——《果园机器人》案例赏析一、案例背景:1、教材分析:《果园机器人》一课是人教版三年级下册第六单元的一课,本单元主要是向学生们介绍科学技术的发展,帮助人类不断探索宇宙的奥秘,不断该变人们的生活。本组课文展示了多方面的内容,把我们带入一个奇特的科技世界。本课介绍的是电脑指挥机器人工作给我们生活带来的改变,是一篇阅读课文。2、学生分析:我们班的这些学生大多数都来自农村,对科技的...

pyhton 使用tab键自动补全_weixin_30519071的博客-程序员宅基地

在写pyhon过程中会经常用到各种模块,不知道具体用模块下那个方法时要去查资料,严重影响工作效率。python也可以和linux一样有tab键自动补全功能。步骤如下:1、linux 系统下编写tab的自动补全脚本,名为tab.py。[[email protected] ~]# vim tab.py# python startup fileimport sysimport readl...

Linux 查看CPU 核数 还有 CPU 个数的命令_weixin_30724853的博客-程序员宅基地

cat /proc/cpuinfo | grep 'physical id' | sort | uniq | wc -l个数cat /proc/cpuinfo | grep 'process' | sort | uniq | wc -l核数转载于:https://www.cnblogs.com/jinanxiaolaohu/p/10881653.html...

Web安全测试-WebScarab工具介绍_weixin_34405354的博客-程序员宅基地

1.1Webscarab  【功能】  WebScarab是一个用来分析使用HTTP和HTTPS协议的应用程序框架。其原理很简单,WebScarab可以记录它检测到的会话内容(请求和应答),并允许使用者可以通过多种形式来查看记录。WebScarab的设计目的是让使用者可以掌握某种基于HTTP(S)程序的运作过程;可以用它来调试程序中较难处理的bug...

随便推点

基于Maven的Mybatis generator配置_weixin_34352449的博客-程序员宅基地

2019独角兽企业重金招聘Python工程师标准>>> ...

OpenCV-10-直方图匹配/直方图规定化_hhbot的博客-程序员宅基地_opencv直方图规定化

直方图匹配又称为直方图规定化,是指将一幅图像的直方图变成规定形状的直方图而进行的图像增强方法。 即将某幅影像或某一区域的直方图匹配到另一幅影像上。使两幅影像的色调保持一致。可以在单波段影像直方图之间进行匹配,也可以对多波段影像进行同时匹配。两幅图像比对前,通常要使其直方图形式一致。直方图规定化的实现步骤如下:计算原图像的累积直方图计算规定直方图的累积直方图计算两累积直方图的差值的绝对值根据累积直方图最小差值建立灰度级的映射 注意:彩色图像的直方图匹配只是先分解通道,对各个通道分别直方图规.

客户关系管理核心理念_北京精诚软件的博客-程序员宅基地

Internet和电子商务正使传统经营模式发生改变,尤其是彻底改变了企业与客户之间的关系。在愈发激烈的市场竞争中,企业的核心经营理念从“以产品为中心”转向“以客户为中心”显得至关重要。谁能把握住客户需求并以最快速度作出响应,谁就能吸引更多的新客户并维持老客户,从而赢得意想不到的利润。1.以客户为中心商业经验告诉我们,“客户就是上帝”。客户类型很多,他们都有各自的利益和目的。客户希望那些包括数据库管理程序在内的数字工具可以帮他们选出最值得选择的主意。世界顶级数字营销公司HUGE的首席执行官亚伦

Linux服务器常用配置(Ubuntu)_Loisy-M的博客-程序员宅基地

======================================================================1.在没有network.service,也没有配源的服务器中,配置网络:======================================================================ip a //表示 ip address (show),显示IP地址信息激活和停止网络接口:ip link set up en

curl测试REST接口_San_Junipero的博客-程序员宅基地

cURL 是很方便的Rest客护端,可以很方便的完成许多Rest API测试的需求,甚至,如果是需要先登入或认证的rest api,也可以进行测试,利用curl指令,可以送出HTTP GET, POST, PUT, DELETE, 也可以改变 HTTP header来满足使用REST API需要的特定条件。curl的参数很多,这边仅列出目前测试REST时常用到的:-X/--reques...

训练营笔记_随心小记的博客-程序员宅基地

Program SMaRT: Performance(高效)、Portable(可移植性)、Simple(简洁)、Maintainable(可维护)、Robustness(可靠)、Testable(可测试)编程规范- 模块 - 独立完成指定功能:接口(a.h),实现(a.c),数据(a_data)- 函数- 语句头文件- 编译过程: - 预处理:头文件插入...

推荐文章

热门文章

相关标签