iOS开发-多线程简介

十度 IOS 2015年12月01日 收藏

多线程从概念上理解是指从软件或者硬件上实现多个线程并发执行的技术,简单点理解就是同一时间可以执行多个事情(比如说一边听歌一边码代码),听歌是一个线程,码代码是一个线程,如果是单核CPU的话,上面两个动作其实可以确切的理解为并发,也就是伪并行,只是两者相差的时间太快没有察觉。电脑现在一般都是双核的或者四核的,比以往的运算能有提高了不少,iOS中六种可以选择的操作线程的方式,具体方式如下:

iOS和OS X线程的底层实现机制是Mach线程,我们基本不会处理线程到这个级别,一般应用中可以使用的线程管理技术有Cocoa threads,POSIX threads,Mulitprocessing Services,通过我们选择实战的方式就是Cocoa threads。

 

iOS和OS X中的应用可以是单线程也可以是多线程的,iOS的应用相当于一个PC上常说的进程,可以扩展子线程,扩展出来的子线程拥有可执行的栈和运行时调度在内存中。线程可以与其他线程或者进程之间通信,一般都是通过I/O读写操作或者其他你需要的方式。同一个应用中的线程拥有同样的虚拟内存空间和访问应用程序进程的权利,简单理解可以理解为在方法中可以访问全局变量。网上很多文章都讨论多线程,不过很少说一些具体线程的分配的空间,一下也是本人从苹果官网找的一张关于线程空间分配的图片:

创建底层线程是相对简单的,不过一个必要的条件就是必须有一个函数或方法作为线程的主要入口点,这样我们就可以简单的实例化一个NSThread线程来展示一下效果,NSThread有两种实例方法:

    NSThread *myThread = [[NSThread alloc] initWithTarget:self
                                                 selector:@selector(methodTask)
                                                   object:nil];
    
    [NSThread detachNewThreadSelector:@selector(methodDetachTask) toTarget:self withObject:nil];

调用方法:

-(void)methodTask{
    NSLog(@"NSTread线程的调用");
}
-(void)methodDetachTask{
    NSLog(@"Detach线程的调用");
}

参数解释:

selector :线程执行的方法,这个selector只能有一个参数,而且不能有返回值。
target  :selector消息发送的对象
argument:传输给target的唯一参数,也可以是nil;

如果你当前主线程正在运行,你想发送消息给主线程,可以通过performSelectorOnMainThread执行:

 [self performSelectorOnMainThread:@selector(mainTask) withObject:nil waitUntilDone:YES];

 调用方法:

-(void)mainTask{
    NSLog(@"performSelectorOnMainThread线程的调用");
}

 线程还有很多可以写的,写了一部分,大家将就着看吧,今天就先写到这里吧,早睡早起身体好,各位晚安~