美文网首页
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