多线程

概念:

//什么是进程?

//1.进程是指在系统中正在运行的一个应用程序
//2.每个进程之间是独立的,每个进程均运行在其专用且受保护的内存空间内


//什么是线程?
//1.1个进程想要执行任务,必须得有线程(每个进程至少要有1条线程)
//2.线程是进程的基本执行单元,一个进程(程序)的所有任务都在线程中执行


//什么是多线程
//1个进程中可以开启多条线程,每条线程可以并行(同时)执行不同任务


//多线程原理
//同一时间,CPU只能处理一条线程,只有一条线程在工作(执行)。多线程并发(同时)执行,其实是CPU快速地在多条线程之间调度(切换)如果CPU调度线程的时间足够快,就造成了多线程并发执行的假象


//如果线程非常非常多,会发生么情况?
//CPU会在n多线程之间调度,CPU会累死,消耗大量的CPU资源


//多线程的优点
//1.能适当提高程序的执行效率
//2.能适当提高资源利用率(CPU,内存利用率)


//多线程的缺点
//1.开启大量的线程,占用大量的内存空间,降低程序的性能
//2.线程越多,CPU在调度线程上的开销就越大
//3.程序设计更加复杂,比如线程之间的通信,线程的资源共享


//什么是主线程
//一个IOS程序运行后,默认会开启一条线程,成为“主线程”或“UI线程”


//主线程的主要作用
//1.显示\刷新UI界面
//2.处理UI事件(比如点击事件,滑动事件,拖拽事件等)


//主线程的使用注意
//1.别将比较耗时的操作放到主线程中
//2.耗时操作会卡住主线程,严重影响UI的流畅度,给用户一种“卡”的坏体验


//IOS中多线程的实现方案
//1.NSThread
//使用起来更加面向对象
//简单易用,可直接操作线程对象
//OC语言
//程序猿管理线程的生命周期
//偶尔使用 使用里面的个别方法
//
//2.GCD
//意在代替NSThread等线程技术
//充分利用设备的多核
//C语言
//自动管理线程的生命周期
//经常使用
//
//3.NSOperation
//基于GCD(底层是GCD)
//比GCD多了一些简单实用的功能
//实用更加面向对象
//自动管理线程的生命周期

//经常使用


1.NSThread

#import "ViewController.h"


@interface ViewController ()


@end


@implementation ViewController


- (void)viewDidLoad {

    [super viewDidLoad];

    // Do any additional setup after loading the view, typically from a nib.

    

    UISwitch *switchButton = [[UISwitch alloc] initWithFrame:CGRectMake(0, 200, 70, 30)];

    [self.view addSubview:switchButton];

    

    UITextView *textView = [[UITextView alloc] initWithFrame:CGRectMake(0, 250, 320, 100)];

    textView.editable = NO;

    [textView setFont:[UIFont systemFontOfSize:30]];

    [textView setText:@"nnasdjfasjdfsjdfsdafdsfdsafnnasdjfasjdfsjdfsdafdsfdsafnnasdjfasjdfsjdfsdafdsfdsafnnasdjfasjdfsjdfsdafdsfdsafnnasdjfasjdfsjdfsdafdsfdsafnnasdjfasjdfsjdfsdafdsfdsafnnasdjfasjdfsjdfsdafdsfdsafnnasdjfasjdfsjdfsdafdsfdsafnnasdjfasjdfsjdfsdafdsfdsafnnasdjfasjdfsjdfsdafdsfdsafnnasdjfasjdfsjdfsdafdsfdsafnnasdjfasjdfsjdfsdafdsfdsafnnasdjfasjdfsjdfsdafdsfdsaf"];

    [self.view addSubview:textView];

}


- (void)loadData:(NSString *)str

{

    //获取当前线程

    NSLog(@"下载东西 ----- %@",[NSThread currentThread]);

    //获取主线程

    NSLog(@"拿到主线程 ---- %@",[NSThread mainThread]);

    NSLog(@"str --- %@",str);

    

//    //睡眠3

//    [NSThread sleepForTimeInterval:3];

    //睡眠到一个NSDate为止

    NSDate *date = [NSDate dateWithTimeIntervalSinceNow:3];

    [NSThread sleepUntilDate:date];

    

    for (int i=0; i<10000; i++) {

        NSLog(@"------------ %d",i);

    }

}


- (void)didReceiveMemoryWarning {

    [super didReceiveMemoryWarning];

    // Dispose of any resources that can be recreated.

}


- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event

{

    [self createThread1];

}


//穿件线程方法3 隐式创建线程

- (void)createThread3

{

    //不会创建线程

//    [self performSelector:@selector(loadData:) withObject:@"performSelector"];

    [self performSelectorInBackground:@selector(loadData:) withObject:@"performSelectorInBackground"];

}


//创建线程方法2 创建线程自动启动

- (void)createThread2

{

    [NSThread detachNewThreadSelector:@selector(loadData:) toTarget:self withObject:@"detachNewThreadSelector"];

}


//创建线程方法1 创建线程然后启动线程

- (void)createThread1

{

    //创建线程

    NSThread *thread = [[NSThread alloc] initWithTarget:self selector:@selector(loadData:) object:@"NSThread"];

    thread.name = @"下载线程";

    //启动线程

    [thread start];

}


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值