zoukankan      html  css  js  c++  java
  • 线程NSThread的使用

    //
    //  ZYThreadViewController.h
    //  Thread
    //
    //  Created by yejiong on 15/11/4.
    //  Copyright © 2015年 zzz. All rights reserved.
    //
    
    #import <UIKit/UIKit.h>
    
    @interface ZYThreadViewController : UIViewController
    
    @end
    //
    //  ZYThreadViewController.m
    //  Thread
    //
    //  Created by yejiong on 15/11/4.
    //  Copyright © 2015年 zzz. All rights reserved.
    //
    
    #import "ZYThreadViewController.h"
    
    @interface ZYThreadViewController ()
    
    @end
    
    @implementation ZYThreadViewController
    
    - (void)viewDidLoad {
        self.view.backgroundColor = [UIColor whiteColor];
        
        if ([NSThread isMainThread]) {
            NSLog(@"主线程");
        }else {
            NSLog(@"分线程");
        }
    }
    
    - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
        //1.在分线程中执行 target 的 selector 方法,传入一个参数 argument。
    //    NSThread* thread = [[NSThread alloc] initWithTarget:self selector:@selector(run:) object:@"123"];
    //
    //    [thread start];
    //    
    //    [thread release];
        
        //2.创建并开启一个分线程。
    //    [NSThread detachNewThreadSelector:@selector(run:) toTarget:self withObject:@"789"];
        
        //3.隐式的创建一个分线程执行 selector 方法。
        [self performSelectorInBackground:@selector(run:) withObject:@"000"];
    }
    
    //以前在分线程中需要我们自己去创建 NSAutoreleasePool 释放在分线程中使用的 autorelease 变量,现在没有这个限制了。
    - (void)run:(id)object {
        NSLog(@"%@", object);
    
        //设置线程休眠多少秒。
    //    [NSThread sleepForTimeInterval:1.0];
        
        //使线程休眠到某个时间。
    //    [NSThread sleepUntilDate:[NSDate dateWithTimeIntervalSinceNow:1.0]];
    
        if ([NSThread isMainThread]) {
            NSLog(@"主线程");
        }else {
            NSLog(@"分线程");
        }
        
        //回到主线程执行 方法调用者 的 selector 方法。
        [self performSelectorOnMainThread:@selector(mainThreadLog:) withObject:@"456" waitUntilDone:NO];
        //wait
        //YES,等待 selector 方法中的内容执行完毕在继续执行分线程中的内容,阻塞当前线程。
        //NO,不等待,两者同时执行,并发执行。
        
        NSLog(@"----------");
        NSLog(@"----------");
        NSLog(@"----------");
        NSLog(@"----------");
        NSLog(@"----------");
        NSLog(@"----------");
        NSLog(@"----------");
        NSLog(@"----------");
    }
    
    - (void)mainThreadLog:(id)objcet {
        NSLog(@"%@", objcet);
        
        if ([NSThread isMainThread]) {
            NSLog(@"主线程");
        }else {
            NSLog(@"分线程");
        }
    }
    
    
    
    @end
  • 相关阅读:
    mockm remote 不能正常使用的解决方案
    uviewui 的 bug 当 url 的 query 参数中有 http://127.0.0.1/ 并且省略请求前缀的时候, 就会导致请求无法发送出去
    检查 nodmeon 是否可以修改文件后重启应用
    mocha 如何延迟指定时间后再运行所有用例
    使用 babel 编译 js 为 es5 支持 ie
    git 摘取提交
    Makefile学习笔记
    使用 Service Worker 缓解网站 DDOS 攻击
    如何热更新长缓存的 HTTP 资源
    网站图片无缝兼容 WebP/AVIF
  • 原文地址:https://www.cnblogs.com/ningmengcao-ios/p/5771204.html
Copyright © 2011-2022 走看看