码迷,mamicode.com
首页 > 编程语言 > 详细

多线程之-----NSThread

时间:2015-10-26 19:09:30      阅读:179      评论:0      收藏:0      [点我收藏+]

标签:

NSThread的创建子线程的三种方法:

1. //创建子线程

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


2.//创建子线程

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


3.第三种创建线程的方式和上面两种的区别:有返回值(当前子线程的对象),需要手动去开启线程

//创建子线程

    NSThread *thread3 = [[NSThread alloc] initWithTarget:self selector:@selector(beginThread3) object:nil];

    

    //设置线程3的名称

    thread3.name = @"thread3";

    

    //开启线程

    [thread3 start];

线程之间的通讯: 可以在一个子线程中给另一个子线程发送指令

//仅仅只是发送指令, 具体线程5结束与否还是得由线程5自己决定

            [thread5 cancel];


接收指令的线程判断是否接收到指令,然后决定是否退出:

//如果当前线程的cancel状态为YES(被其他线程取消了)

        if ([[NSThread currentThread] isCancelled]) {

            

            NSLog(@"线程5 退出");

            

            //退出当前线程

            [NSThread exit];

        }



线程加锁:

//线程锁

    NSLock *lock;


-(void)beginThread6

{

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

        

        [lock lock]; //加锁

        

        //sum1

        sum--;

        

        NSLog(@"线程6 sum=%d", sum);

        

        //暂停1

        [NSThread sleepForTimeInterval:1];

        

        [lock unlock]; //解锁

    }

    

}


线程刷新UI必须回到主线程:

//必须回到主线程刷新UI(改变progressView的进度值progress)

        //waitUntilDone:是否等待回到主线程的方法执行完成

        [self performSelectorOnMainThread:@selector(onMainThread:) withObject:@(i) waitUntilDone:YES];


-(void)onMainThread:(NSNumber *)i

{    //在主线程改变进度条的值

    [progressView setProgress:[i floatValue] * .1 animated:YES];

}



多线程之-----NSThread

标签:

原文地址:http://my.oschina.net/u/2448151/blog/522266

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!