美文网首页
iOS多线程之1.从Thread看多线程的生命周期

iOS多线程之1.从Thread看多线程的生命周期

作者: 豆丶浆油条 | 来源:发表于2016-11-04 11:21 被阅读111次

      Thread 是多线程中最容易理解,但是使用起来又是最麻烦的一种多线程方法。为什么说容易理解呢?一个NSThread的对象就是一条线程。使用起来麻烦是因为,需要我们自己管理线程的生命周期:创建线程、调度任务、销毁线程。

    首先我们开始创建线程:

    ​第一种方法:

    NSThread *thread = [[NSThread alloc] initWithBlock:^{   
    
    //调度任务,例如下载图片,往服务器上传文件等一切耗费时间的操作
    
    ​}];
    

    ​ 也可以用下面的方法:

     - (instancetype)initWithTarget:(id)target selector:(SEL)selector object:(nullable id)argument;
    
    id :消息发送的对象;
    selector:要传递的消息,消息就是我们要调度的任务。;
    argument:传递的参数,只能有一个,不过我们可以把多个参数封装成一个字典。
    

    就这样一条线程就创建完成了。但是创建完一条线程,线程就会执行任务吗。当然不是,你得开启它,不然它是不会执行任务的。
    [thread start];

    线程销毁

      当子线程的任务执行完之后,子线程会自动退出。默认执行[NSThread exit]方法。当系统完成任务之后,会发送一个通知“NSThreadWillExitNotification”,我们可以添加观察者来监听线程的退出:

     [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(threadfinishTask:) name:NSThreadWillExitNotification object:nil];
    
      - (void)threadfinishTask:(NSNotification *)notification{
    
     NSLog(@"threadfinishTask");
    
     NSLog(@"%@",notification.userInfo);
    
     }
    

    打印结果:

    20161028171623032.jpeg

    我们发现userInfo为空,证明没有什么通知信息。我们可以在这个方法写子线程完成之后的操作,与主线程通信。

      个人理解,如果想研究多线程编程还得从Thread开始。因为Thread逻辑并不复杂,封装的层级相对较低,我们要自己管理线程的生命周期、同步、加锁等问题,这会加深我们对多线程编程的理解,但是也会造成一定的性能开销。但用的时候应该多以Cocoa Operations和Grand Central Dispatch为主,尤其是Cocoa Operations,它更灵活,可以很轻易的处理复杂的情况。

       个人原创,欢迎转载。可以关注我的博客。我会定期分享一下iOS,开发方面的知识,大家有什么意见可以给我发私信。

    相关文章

      网友评论

          本文标题:iOS多线程之1.从Thread看多线程的生命周期

          本文链接:https://www.haomeiwen.com/subject/xeoiuttx.html