NSThread创建线程的方式

NSThread通常来说, 有以下3种创建子线程的方式:

1.通过[[NSThread alloc] init]可以实例化一个线程对象(也就是直接可以通过此方式创建并获取一个子线程对象):

通过初始化创建子线程对象,将要在子线程中执行的任务放在block中传入:

NSThread *thread = [[NSThread alloc] initWithBlock:^{
      for (int i = 0 ; i < 10000; i++) {
            NSLog(@"%d---%@",i,[NSThread currentThread]);
      }
}];
[thread start]; //调用start方法才能执行线程的任务

//通过传入sel方法及和对象初始化子线程对象,子线程中执行当前类的run:方法传入字符串@"jack".:
NSThread *thread = [[NSThread alloc] initWithTarget:self selector:@selector(run:) object:@"jack"];
[thread start];
thread.name = @"jack_thread";

2.通过NSThread的detachNewThread类方法在子线程中执行任务,但是无法获取或者操作此线程, 如果仅仅是要开辟子线程执行相关任务,并无需设置子线程相关属性或者名称可以使用此方法:
[NSThread detachNewThreadWithBlock:^{
        NSLog(@"%@",[NSThread currentThread]);
 }];
[NSThread detachNewThreadSelector:@selector(run:) toTarget:self withObject:@"jack"];    //子线程中执行当前类的run:方法传入字符串@"jack".

3.系统有一个基于NSObject的分类: NSThreadPerformAdditions, 在此分类中有个对NSObject类的扩展实例方法:
- (void)performSelectorInBackground:(SEL)aSelector withObject:(nullable id)arg API_AVAILABLE(macos(10.5), ios(2.0), watchos(2.0), tvos(9.0));

我们可以在需要创建子线程的地方, 例如控制器调用:

//在子线程中执行当前类的run:方法传入参数@"jack"
[self performSelectorInBackground:@selector(run:) withObject:@"jack"];

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 11,172评论 1 32
  • 一、多线程基础 基本概念 进程进程是指在系统中正在运行的一个应用程序每个进程之间是独立的,每个进程均运行在其专用且...
    AlanGe阅读 571评论 0 0
  • NSThread 第一种:通过NSThread的对象方法 NSThread *thread = [[NSThrea...
    攻城狮GG阅读 869评论 0 3
  • 1.设计模式是什么? 你知道哪些设计模式,并简要叙述?设计模式是一种编码经验,就是用比较成熟的逻辑去处理某一种类型...
    龍飝阅读 2,244评论 0 12
  • →_→ 从前有个人,他家门口有座大山,每次他要出远门都要绕过那座大山,然后有天他下定决心要挖开这座大山,村里的智叟...
    刘小胜阅读 621评论 0 9