利用performSelectorInBackground和performSelectorOnMainThread实现多线程
NSObject类的performSelectorOnMainThread和performSelectorInBackground能够实现简单的多线程编程技术
1、- (void)performSelectorInBackground:(SEL)aSelector withObject:(id)arg
创建一个线程在子线程运行,aSelector代表了新创建的线程。arg是传入的參数
2、- (void)performSelectorOnMainThread:(SEL)aSelector withObject:(id)arg waitUntilDone:(BOOL)wait;
该方法的作用是在主线程中,运行制定的方法(代码块)。
參数:
@selector就是。要定义我们要运行的方法。
withObject:arg定义了,我们运行方法时,传入的參数对象。
类型是id。
(我们能够传入不论什么參数)
waitUntilDone:YES指定,当前线程是否要被堵塞。直到主线程将我们制定的代码块运行完。
注意:
1.当前线程为主线程的时候,waitUntilDone:YES參数无效。
2.该方法。没有返回值
3.该方法主要用来用主线程来改动页面UI的状态。
sample code:
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib. _label=[[UILabel alloc] initWithFrame:CGRectMake(40, 40, 60, 40)];
_label.textColor=[UIColor redColor];
_label.text=@"123";
[self.view addSubview:_label]; [self performSelectorInBackground:@selector(backWork) withObject:nil];
}
-(void)backWork
{
NSLog(@"the thread is %@",[NSThread currentThread]);
sleep(2);
[self performSelectorOnMainThread:@selector(mainWork) withObject:nil waitUntilDone:NO];
} -(void)mainWork
{
NSLog(@"the main thread is %@",[NSThread currentThread]); _label.text=@"456";
_label.textColor=[UIColor greenColor]; }
运行结果:
2014-08-19 11:03:59.101 testApp[1848:3107] the thread is <NSThread: 0x8c504a0>{name = (null), num = 2}
2014-08-19 11:04:01.103 testApp[1848:60b] the main thread is <NSThread: 0x8c444c0>{name = (null), num = 1}
利用performSelectorInBackground和performSelectorOnMainThread实现多线程的更多相关文章
- 利用System.Net.Mail和多线程实现邮件发送
对于邮件发送,一般来说,程序会响应超过1秒,这样对于用户体验来说,让用户等待的时间过长,而且发送的邮件越多时间就越长,所以这里我利用了线程的来处理邮件发送这种耗时的工作,废话不多说,直接上代码 pri ...
- PHP中利用pcntl实现多进程(模拟多线程)实例(转)
windows不支持pcntl的多线程(非Unix类系统不支持此模块),pcntl在很久很久之前就听过了,但是一直没有尝试着真正要用它. 这不,遇到socket问题了,看socket,遇到pcntl了 ...
- 利用readwritelock简单模拟实现多线程下cache的系统
package cn.lyy.hibernate.many2one; import java.util.HashMap; import java.util.Map; import java.util. ...
- 利用同步辅助类CountDownLatch计算多线程的运行时间
一.CountDownLatch jdk提供的一个同步辅助类,在完成一组在在其他线程中执行的操作前,允许一个或者多个其他的线程等待,通过调用 await() 方法阻塞,直到由于 countDown() ...
- Apache利用mod_limitipconn模块限制客户端多线程下载
由于网站几次被人以搞并发弄跨了,所以百度了一堆方法.其中有一篇针对apache的能限制ip访问量.不允许同一ip大并发访问. 安装模块 yum install mod_limitipconn.x86_ ...
- iOS多线程拾贝------操作巨人编程
iOS多线程拾贝------操作巨人编程 多线程 基本 实现方案:pthread - NSThread - GCD - NSOperation Pthread 多平台,可移植 c语言,要程序员管理生命 ...
- iOS多线程——GCD篇
什么是GCD GCD是苹果对多线程编程做的一套新的抽象基于C语言层的API,结合Block简化了多线程的操作,使得我们对线程操作能够更加的安全高效. 在GCD出现之前Cocoa框架提供了NSObjec ...
- 深入解析PHP中的(伪)多线程与多进程
本篇文章是对PHP中的(伪)多线程与多进程进行了详细的分析介绍,需要的朋友参考下 (伪)多线程:借助外力利用WEB服务器本身的多线程来处理,从WEB服务器多次调用我们需要实现多线程的程序.QUOTE: ...
- Python3 多进程和多线程
Unix/Linux操作系统提供了一个fork()系统调用,它非常特殊.普通的函数调用,调用一次,返回一次,但是fork()调用一次,返回两次,因为操作系统自动把当前进程(称为父进程)复制了一份(称为 ...
随机推荐
- Vijos——T 1164曹冲养猪
https://vijos.org/p/1164 描述 自从曹冲搞定了大象以后,曹操就开始捉摸让儿子干些事业,于是派他到中原养猪场养猪,可是曹冲满不高兴,于是在工作中马马虎虎,有一次曹操想知道母猪的数 ...
- android屏幕适配方案
曾经看了android的屏幕适配方案,有非常多种.当中自己用到的一种是:先找一款主流的分辨率的android机,如:1080*1920的分辨率做基准,然后在这个基准上.调整好一切布局.图片.适配其它手 ...
- 字串乱序 PHP&JS
<?php /** * 字串乱序 PHP&JS * * php 中把字串乱序后输出给客户机的 JAVASCRIPT , JAVASCRIPT 中恢复 * 在指定长度提取一个字符,并把这一 ...
- 导出查询结果到csv文件
set colsep , set feedback off set heading off set trimout on spool my.csv select * from emp ...
- app 自动化测试 Appium+Java可以运行的代码
地址:http://www.cnblogs.com/sunny-sl/p/6520465.html
- 宏定义#define整理
一.宏定义#define 优点:一方面可以节省程序的空间上的篇幅,另外,恰当地使用宏定义可提高程序的时间效率.代码可以写的通俗易懂.可以提高程序的清晰性.可读性,使于修改移植等. 缺点:宏定义的使用实 ...
- 修改IIS7并发连接数目限制
转自原文 修改IIS7并发连接数目限制 1. 调整IIS 7应用程序池队列长度 由原来的默认1000改为65535. IIS Manager > ApplicationPools > Ad ...
- JavaScript字符串替换replace方法
在日常的js开发中, 当要把字符串中的内容替换时,如果使用类似C#的string.replace方法,如下 var str='aabbccaa'; str=str.replace('aa','dd') ...
- Gamma correction 伽马校准及 matlab 实现
matlab 内置实现:imadjust Gamma Correction gamma correction formula : .^(gamma) or .^(1/gamma)? 用以调整图像光照强 ...
- 关于 /etc/zabbix/zabbix_agentd.conf 文件 Hostname 文件的说明
前提 (1) /etc/hosts 文件如下 [root@testdb ~]# cat /etc/hosts 127.0.0.1 localhost localhost.localdomain loc ...