NSThread 详解

第一、iOS主线程专门用来更新显示UI界面、处理用户触摸事件的,所以不能阻塞主线程,否则带来极坏的用户体验。

一般的解决方案就是将那些耗时的操作放到另外一个线程中去执行。

NSThread *red=[NSThread currentThread]; //获取当前线程

NSThread *mainThread=[NSThread mainThread]; //获取主线程

[red setName:@"hello"];   //设置线程名称

if ([red isMainThread]) {  //判断当前线程是否是主线程

NSLog(@"currentThread:%@",red);

}

第二、NSThread的创建

1. - (id)initWithTarget:(id)target selector:(SEL)selector object:(id)argument; 

参数的意义:

selector :线程执行的方法,这个selector只能有一个参数,而且不能有返回值。

target  :selector消息发送的对象

argument:传输给target的唯一参数,也可以是nil

sample:

  NSThread *thread=[[NSThread alloc] initWithTarget:self selector:@selector(timerThread) object:nil];
        [thread start];
-(void)timerThread
{
    NSTimer *timer=[NSTimer timerWithTimeInterval:0.5 target:self selector:@selector(timeSchedule) userInfo:nil repeats:YES];
    NSRunLoop *runLoop=[NSRunLoop currentRunLoop];
    [runLoop addTimer:timer forMode:NSDefaultRunLoopMode];

    while ([runLoop runMode:NSDefaultRunLoopMode beforeDate:[NSDate distantFuture]]);
}
-(void)timeSchedule
{
    num++;
    NSLog(@"now the number is %d",num);
}

2.隐式创建线程

[self performSelectorInBackground:@selector(timerThread) withObject:nil];

会隐式地创建一条新线程,并且在这条线程上调用self的timerThread方法

3.detachNewThreadSelector 创建线程

[NSThread detachNewThreadSelector:@selector(timerThread) toTarget:self withObject:nil];

4. 停止当前线程的执行

[NSThread exit];

5. 暂停当前线程几秒

[NSThread sleepForTimeInterval:4];

6. 在主线程上执行

[self performSelectorOnMainThread:@selector(lastResult) withObject:nil waitUntilDone:YES];

7.在指定线程上执行操作

_thread=[[NSThreadalloc]
initWithTarget:selfselector:@selector(timerThread)object:nil];

[_thread
start];

[selfperformSelector:@selector(lastResult)onThread:_threadwithObject:nilwaitUntilDone:YES];

线程交互sample:

http://download.csdn.net/detail/ycxmartin111111/7351381

NSThread 详解

时间: 2024-10-13 17:44:44

NSThread 详解的相关文章

iOS-多线程之NSThread详解

前言 线程是用来执行任务的,线程彻底执行完任务A才能去执行任务B.为了同时执行两个任务,产生了多线程. 我打开一个视频软件,我开辟一个线程A让它执行下载任务,我开辟一个线程B,用来播放视频.我开辟两个线程后,这两个任务能同时执行,如果我开辟一  个线程,只有下载任务完成,才能去执行播放任务. 线程相当于店里的服务员,一个服务员同时只能做一件事情,多顾几个服务员,就能同时做很多事情. 进程 1.进程是应用程序的执行实例,简单来说就是在操作系统中运行的程序.例如我在手机上只打开QQ和微信这两个软件,

iOS GCD NSOperation NSThread等多线程各种举例详解(拷贝)

2年多的iOS之路匆匆而过,期间也拜读来不少大神的博客,近来突然为自己一直做伸手党感到羞耻,是时候回馈社会.回想当年自己还是小白的时候,照着一些iOS多线程教程学,也只是照抄,只知其然.不知其所以然.现写一篇详细教程奉献给广大读者.废话就不多说了,直接上干货.如下图列举了很多多线程的知识点,每个知识点都写有对应的详细例子,并对运行结果进行分析,绝对拿实践结果来说话.如果各位道友发现错误之处还请指正.附上demo下载地址 iOS中几种多线程的比较 GCD:是苹果为多核的并行运算提出的解决方案,所以

iOS多线程实现方案详解01——NSThread

NSThread 一.创建和启动线程 1.开线程的几种方式 1)先创建线程,后启动 NSThread *thread = [[NSThread alloc] initWithTarget:self selector:@selector(run) object:nil]; [thread start]; 2)创建线程后自动直接启动 [NSThread detachNewThreadSelector:@selector(run) toTarget:self withObject:nil]; [sel

转载iOS--->NSRunLoop详解

转载--->NSRunLoop(详解) NSRunLoop大部分情况在多线程编程的时候才会用到..但是一般不会用NSRunLoop,因为它不是线程安全的.一般都建议用CFRunLoop,这个是线程安全的.input source and port-based custom source这些操作,是向线程里面添加操作的.添加的这些操作,会在该线程执行空间的调度下执行. 通俗的理解就是如果你创建的了一个子线程,子线程的运行函数如下- (void) subThread (void*)unused { 

AFNetwork 作用和用法详解

AFNetworking是一个轻量级的iOS网络通信类库.它建立在NSURLConnection和NSOperation等类库的基础上,让很多网络通信功能的实现变得十分简单.它支持HTTP请求和基于REST的网络服务(包括GET.POST. PUT.DELETE等).支持ARC. Github地址:https://github.com/AFNetworking/AFNetworking // // MJViewController.m // 03.AFN演练 // // Created by a

iOS网络编程(六) NSURLSession详解

昨夜浏览Demo的时候,看到别人请求网络数据用的是NSURLSession,当时就在想这里什么,怎么没有用过,引起了我的好奇心,遂去百度-谷歌-官方文档一一查看,有了一定的了解,原来NSURLSession是iOS7中新的网络接口,它与咱们熟悉的NSURLConnection是并列的. 查找资料,写了一个小Demo,大家可以看看,有什么不足的地方,可以留言帮我指出来. // // HMTRootViewController.m // // // Created by HMT on 14-6-7.

iOS---NSAutoreleasePool自动释放原理及详解

当您向一个对象发送一个autorelease消息时,Cocoa就会将该对象的一个引用放入到最新的自动释放池.它仍然是个正当的对象,因此自动释放池 定义的作用域内的其它对象可以向它发送消息.当程序执行到作用域结束的位置时,自动释放池就会被释放,池中的所有对象也就被释放. 1. ojc-c 是通过一种"referring counting"(引用计数)的方式来管理内存的, 对象在开始分配内存(alloc)的时候引用计数为一,以后每当碰到有copy,retain的时候引用计数都会加一, 每当

iOS开发——多线程OC篇&多线程详解

多线程详解 前面介绍了多线程的各种方式及其使用,这里补一点关于多线程的概念及相关技巧与使用,相信前面不懂的地方看了这里之后你就对多线程基本上没有什么问题了! 1——首先ios开发多线程中必须了解的概念: 进程 正在进行中的程序被称为进程,负责程序运行的内存分配 每一个进程都有自己独立的虚拟内存空间 线程 线程是进程中一个独立的执行路径(控制单元) 一个进程中至少包含一条线程,即主线程 可以将耗时的执行路径(如:网络请求)放在其他线程中执行 创建线程的目的就是为了开启一条新的执行路径,运行指定的代

《招一个靠谱的移动开发》iOS面试题及详解(上篇)

多线程.特别是NSOperation 和 GCD 的内部原理. 运行时机制的原理和运用场景. SDWebImage的原理.实现机制.如何解决TableView卡的问题. block和代理的,通知的区别.block的用法需要注意些什么. strong,weak,retain,assign,copy nomatic 等的区别. 设计模式,mvc,单利,工厂,代理等的应用场景. 单利的写法.在单利中创建数组应该注意些什么. NSString 的时候用copy和strong的区别. 响应值链. NSTi