美文网首页iOS DeveloperiOS精英班
iOS多线程之二:NSThread的使用

iOS多线程之二:NSThread的使用

作者: s_在路上 | 来源:发表于2016-08-29 15:02 被阅读84次

    NSThread
    NSThread封装性最差,最偏向于底层,主要基于thread使用,生命周期需要手动管理,所以这套方案也是偶尔用用,比如 [NSThread currentThread],它可以获取当前线程类,你就可以知道当前线程的各种属性,用于调试十分方便。

    一、线程创建

    // 创建并自动启动
    [NSThread detachNewThreadSelector:@selector(threadAlloc:) toTarget:self withObject:nil];
    
    // 先创建线程,再启动
    NSThread *newThread = [[NSThread alloc] initWithTarget:self selector:@selector(run:) object:obj];
    [newThread run];
    
    // ios(10.0),线程的创建,线程创建后直接运行
    [NSThread detachNewThreadWithBlock:^{
       [do something];
    }];
    
    [NSThread detachNewThreadSelector:@selector(run:) toTarget:self withObject:obj];
    
    
    Paste_Image.png

    二、线程之间的通讯

    // 在主线程中运行方法,wait表示是否阻塞这个方法的调用,如果为YES则等待主线程中运行方法结束,一般可用于在子线程中调用UI方法。
    - (void)performSelectorOnMainThread:(SEL)aSelector withObject:(nullable id)arg waitUntilDone:(BOOL)wait modes:(nullable NSArray<NSString *> *)array;
    
    // 隐含产生新线程
    - (void)performSelectorInBackground:(SEL)aSelector withObject:(nullable id)arg;
    
    // 在指定线程中执行,但该线程必须具备run loop。
    - (void)performSelector:(SEL)aSelector onThread:(NSThread *)thr withObject:(nullable id)arg waitUntilDone:(BOOL)wait modes:(nullable NSArray<NSString *> *)array;
    
    

    三、NSThread的其它一些常用的方法

    + (NSThread *)currentThread;                     // 获得当前线程
    + (void)sleepForTimeInterval:(NSTimeInterval)ti; // 线程休眠
    + (NSThread *)mainThread;                        // 主线程,亦即UI线程了
    + (BOOL)isMainThread;                            // 判断当前线程是否是主线程
    + (BOOL)isMultiThreaded;                         // 判断当前线程是否是多线程
    + (void)sleepUntilDate:(NSDate *)date;           // 当前线程休眠到指定日期
    + (void)exit;                                    // 强行退出当前线程
    + (double)threadPriority;                        // 获取当前线程线程优先级
    + (BOOL)setThreadPriority:(double)p;             // 给当前线程设定优先级,调度优先级的取值范围是0.0 ~ 1.0,默认0.5,值越大,优先级越高。
    + (NSArray *)callStackReturnAddresses            // 线程的调用都会有函数的调用函数的调用就会有栈返回地址的记录,在这里返回的是函 数调用返回的虚拟地址,说白了就是在该线程中函数调用的虚拟地址的数组
    + (NSArray *)callStackSymbols                    // 同上面的方法一样,只不过返回的是该线程调用函数的名字数字
    + (BOOL)isMainThread;                            // 当前线程是否主线程
    - (BOOL)isMainThread; 
    - (BOOL)isExecuting;                             // 线程是否正在运行
    - (BOOL)isFinished;                              // 线程是否已结束
    - (void)cancel                                   // 终止线程循环
    - (void)start                                    // 开启线程循环
    - (void)isCancelled;                             //判断线程是否撤销
    - (void)setName:(NSString *)n;                   //设置线程名称
    

    相关文章

      网友评论

        本文标题:iOS多线程之二:NSThread的使用

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