美文网首页
iOS多线程-NSThread

iOS多线程-NSThread

作者: 雪影无痕 | 来源:发表于2021-08-24 15:12 被阅读0次

    ·NSThread 每个NSThread对象对应一个线程,量级较轻

    ·优点:NSThread 比其他两个轻量级,使用简单

    ·缺点:需要自己管理线程的生命周期、线程同步、加锁、睡眠以及唤醒等。线程同步对数据的加锁会有一定的系统开销

    //    创建方式一,有线程对象,需手段开启线程

        NSThread *thread = [[NSThread alloc] initWithTarget:selfselector:@selector(threadAc1:) object:@"thread1"];

        thread.name=@"thread1";

        //手动开启线程

        [threadstart];

        //线程的大小

    //    thread.stackSize

        //方式二:没有创建线程对象,自动开启线程

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

        //方式三:block创建方式没有创建线程对象,自动开启线程

        [NSThread detachNewThreadWithBlock:^{

            for(inti =0; i <50; i ++) {

                NSLog(@"thread3:%d",i);

            }

        }];

    //    方式四

        [selfperformSelectorInBackground:@selector(threadAc3:) withObject:@"3"];

        //回到主线程设置UI

        [self performSelectorOnMainThread:@selector(threadAc4:) withObject:@"4" waitUntilDone:YES];

    }

    - (void)threadAc1:(NSString*)str{

        NSLog(@"线程%@",[NSThread currentThread]);

        for(inti =0; i <50; i ++) {

            NSLog(@"thread1:%d",i);

            if(i ==20) {

                //休眠2秒后开始执行

                [NSThread sleepForTimeInterval:2];

            }elseif(i ==40){

                //退出线程

                [NSThreadexit];

            }

        }

        //当前线程是否是多线程

        if ([NSThread isMultiThreaded]) {

            NSLog(@"开启多线程了%@ ",str);

        }

        //当前线程是否为主线程

    //    [NSThread isMainThread];

    }

    - (void)threadAc2:(NSString*)str{

        NSLog(@"线程%@",[NSThread currentThread]);

        for(inti =0; i <50; i ++) {

            NSLog(@"thread2:%d",i);

        }

        if ([NSThread isMultiThreaded]) {

            NSLog(@"开启多线程了%@ ",str);

        }

    }

    - (void)threadAc3:(NSString*)str{

        NSLog(@"线程%@",[NSThread currentThread]);

        for(inti =0; i <50; i ++) {

            NSLog(@"thread3:%d",i);

        }

        if ([NSThread isMultiThreaded]) {

            NSLog(@"开启多线程了%@ ",str);

        }

    }

    - (void)threadAc4:(NSString*)str{

        NSLog(@"线程%@",[NSThread currentThread]);

        for(inti =0; i <50; i ++) {

            NSLog(@"thread4:%d",i);

        }

        if ([NSThread isMultiThreaded]) {

            NSLog(@"开启多线程了%@ ",str);

        }

    }

    相关文章

      网友评论

          本文标题:iOS多线程-NSThread

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