美文网首页
iOS多线程(二)-- NSThread

iOS多线程(二)-- NSThread

作者: eightzg | 来源:发表于2016-05-16 13:09 被阅读35次

    NSThread也是iOS实现多线程的一种解决方案,是objc语言。线程的生命周期也是程序员管理。

    • 一个NSThread对象就是一个线程。
    • 用NSThread创建线程有三种方法。

    方法1:

    - (void)createThread1
    {
        // 创建线程
        NSThread *thread = [[NSThread alloc] initWithTarget:self selector:@selector(download:) object:@"http://b.png"];
        //给线程设置名字
        thread.name = @"下载线程";
        // 启动线程(调用self的download方法)
        [thread start];
    }
    
    • 这种方法的特点是可以拿到线程对象thread,可以对此对象进行一些操作,如设置名字等。
    • 注意:创建线程对象之后要调用-start操作,才会开启线程。

    方法2:

    - (void)createThread2
    {
        [NSThread detachNewThreadSelector:@selector(download:) toTarget:self withObject:@"http://a.jpg"];
    }
    
    • 这种方式创建线程可以直接启动,但是不能拿到线程对象。

    方法3:

    - (void)createThread3
    {
        [self performSelectorInBackground:@selector(download:) withObject:@"http://c.gif"];
    }
    
    • 这个方法是隐式的创建新的线程,并开启线程进行对应的操作。
    • 注意方法中的InBackground,这个方法区别于下面的方法。
    [self performSelector:@selector(download:) withObject:@"http://c.gif"];
    
    • 这个方法不会创建线程,会在当前线程中进行操作。
    开启线程调用的download方法实现如下:
    - (void)download:(NSString *)url
    {
        NSLog(@"下载东西---%@---%@", url, [NSThread currentThread]);
    }
    
    • 这个方法就是模拟下载操作,并且打印当前线程,在方法1中调用此方法会会打印出线程的名字是下载线程
    有的时候我们b不知道当前的线程是主线程还是子线程,这时候就可以调用方法[NSThread currentThread];来判断。
    另外可以调用方法[NSThread mainThread];来拿到主线程进行线程之间的通信,那么什么是线程间通信呢?

    线程间通信

    相关文章

      网友评论

          本文标题:iOS多线程(二)-- NSThread

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