利用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()调用一次,返回两次,因为操作系统自动把当前进程(称为父进程)复制了一份(称为 ...
随机推荐
- CentOS经常使用文件操作命令[百度博客搬家]
路径操作的CentOS经常使用命令 如今整理例如以下(百度博客搬家) cd pwd NO1. 显示当前路径 [root@rehat root]# pwd NO2. 返回用户主文件夹 [ro ...
- javaScript实现选中文字提示新浪微博分享的效果
<!DOCTYPE html> <html xmlns:wb="http://open.weibo.com/wb"> <head> <me ...
- VUE笔记 - 品牌后台 - v-for Splice Some Filter findIndex indexOf 直接return函数结果
<body> <div id="app"> <div class="panel panel-primary"> <di ...
- C++——多态性实现机制
C++的多态性实现机制剖析 1. 多态性和虚函数 #include <iostream.h> class animal { public: void sleep() { cout<& ...
- php实现 字符串分割
php实现 字符串分割 一.总结 一句话总结: 1.字符串按固定位分割函数是什么? 7 $str_arr=str_split($str,8); 2.字符串填补函数的参数是什么? 10 $str_arr ...
- 简介及环境搭建跑通Hello
简介及环境搭建跑通Hello Spring Spring是一个开放源代码的设计层面框架,他解决的是业务逻辑层和其他各层的松耦合问题,因此它将面向接口的编程思想贯穿整个系统应用.是为了解决企业应用程序开 ...
- ftp 下载时防止从缓存中获取文件
//http://baike.baidu.com/link?url=QucJiA_Fg_-rJI9D4G4Z4687HG4CfhtmBUd5TlXrcWCeIEXCZxIh0TD7ng1wROAzAu ...
- [Angular2 Form] Reactive Form, FormBuilder
Import module: import { NgModule } from '@angular/core'; import { CommonModule } from '@angular/comm ...
- [慕课笔记]mongodb入门篇
一:对mongodb有一个系统的完备的了解,只有概念清楚了,才能更好的使用 二:学会mongodb数据库的搭建 首先:了解如何部署数据库的服务 搭建简单的单机服务到搭建具有冗余容错功能的复制集再到搭建 ...
- VS_VERSION_INFO
VS_VERSION_INFO这里可以修改ocx的版本号