iOS多线程中的实际方案之二NSThread

NSThread


  • 创建和启动线程的3个方法
    1> 先创建,后启动
// 创建
NSThread *thread = [[NSThread alloc] initWithTarget:self selector:@selector(download) object:nil];
// 设置线程的名字
thread.name = @"下载线程01";
// 设置线程的优先级(取值 0.0 - 1.0)
thread.threadPriority = 0.5;
// 启动
[thread start];
-(void) download{
[self performSelectorOnMainThread:@selector(back:) withObject:@"back" waitUntilDone:NO];
}
-(void) back:(id)obj{
  NSLog("%@",obj);
  NSLog("%@,[NSThread currentThread]);
}

2> 创建完自动启动

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

3> 隐式创建(自动启动)// NSObject开启线程

[self performSelectorInBackground:@selector(download:) withObject:nil];
// waitUntilDone:YES 表示当@selector执行完毕后后面的代码才执行。
[self performSelectorOnMainThread:@selector(download:) withObject:nil waitUntilDone:NO];

4> runloop

  • Runloop是程序启动后建立的一个主运行循环,保证程序不退出,而且还负责监听事件,如触摸,定
    时器、网络请求完成。
  • 没有事件时,进行休眠。
  • 有事件时,被唤醒,接收事件,找到最合适的处理对象。
  • 主线程和子线程的运行循环:
    1)主线程和子线程都有运行循环
    2)主线程的运行循环是工作的 主线程中是有autoreleasepool的
    3)使用GCD和NSOperation创建的线程会添加自动释放池
    4)使用NSThread的线程不会自动添加autoreleasepool
    NSThread和NSObject如果在后台创建了autorelease对象 "需要使用自动释放池 否则会出现内存泄漏",所以前面的代码要加上autoreleasepool
  • 注意点:线程任务一旦执行完毕或者线程一旦强制退出,不能再重新开启线程,只能重新创建线程。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 概览 大家都知道,在开发过程中应该尽可能减少用户等待时间,让程序尽可能快的完成运算。可是无论是哪种语言开发的程序最...
    CocoLeo阅读 870评论 1 9
  • 1、简介:1.1 iOS有三种多线程编程的技术,分别是:1.、NSThread2、Cocoa NSOperatio...
    LuckTime阅读 1,383评论 0 1
  • 多线程基本概念 单核CPU,同一时间cpu只能处理1个线程,只有1个线程在执行 。多线程同时执行:是CPU快速的在...
    WeiHing阅读 726评论 1 5
  • “物竞天择,适者生存。”相信这句话很多人都听说过,这就是达尔文进化论的核心思想。有一种植物叫红树林,就能很好地诠释...
    胡义华阅读 422评论 0 0
  • 过完小年(腊月二十三),人们就开始为过年忙活了。 民谣中唱到:“二十三,糖瓜粘;二十四,扫房子;二十五,冻豆腐;二...
    花开脉脉阅读 370评论 6 2