zoukankan      html  css  js  c++  java
  • iOS开发多线程篇—创建线程

    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
    {
        self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];
         
        //创建线程的第一种方式
        NSThread *thread = [[NSThread alloc] initWithTarget:self selector:@selector(run:) object:@"universe"];
        [thread start];
        [thread release];
         
         
        //创建线程的第二种方式,NSThread类方法
        [NSThread detachNewThreadSelector:@selector(run:) toTarget:self withObject:@"yuzhou"];
         
         
        //创建线程的第三种方法  NSObject方法
        [self performSelectorInBackground:@selector(run:) withObject:@"nsobject thread"];
         
        //创建线程的第四种方式
        NSOperationQueue *oprationQueue = [[NSOperationQueue alloc] init];
        [oprationQueue addOperationWithBlock:^{
            //这个block语句块在子线程中执行
            NSLog(@"oprationQueue");
        }];
        [oprationQueue release];
         
        //第五种创建线程的方式
        NSOperationQueue *oprationQueue1 = [[NSOperationQueue alloc] init];
        oprationQueue1.maxConcurrentOperationCount = 1;//指定池子的并发数
         
        //NSOperation 相当于java中的runnable接口,继承自它的就相当一个任务
        NSInvocationOperation *invation = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(run:) object:@"invation"];
        [oprationQueue1 addOperation:invation];//将任务添加到池子里面,可以给池子添加多个任务,并且指定它的并发数
        [invation release];
         
        //第二个任务
        NSInvocationOperation *invation2 = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(run2:) object:@"invocation2"];
        invation2.queuePriority = NSOperationQueuePriorityHigh;//设置线程优先级
        [oprationQueue1 addOperation:invation2];
        [invation2 release];
         
        [oprationQueue1 release];
         
        //调用主线程,用来子线程和主线程交互,最后面的那个boolean参数,如果为yes就是等这个方法执行完了在执行后面的代码;如果为no的话,就是不管这个方法执行完了没有,接着往下走
        [self performSelectorOnMainThread:@selector(onMain) withObject:self waitUntilDone:YES];
         
        //---------------------GCD----------------------支持多核,高效率的多线程技术
        //创建多线程第六种方式
        dispatch_queue_t queue = dispatch_queue_create("name", NULL);
        //创建一个子线程
        dispatch_async(queue, ^{
            // 子线程code... ..
            NSLog(@"GCD多线程");
             
            //回到主线程
            dispatch_sync(dispatch_get_main_queue(), ^{//其实这个也是在子线程中执行的,只是把它放到了主线程的队列中
                Boolean isMain = [NSThread isMainThread];
                if (isMain) {
                    NSLog(@"GCD主线程");
                }
            });
        });
         
         
        self.window.backgroundColor = [UIColor whiteColor];
        [self.window makeKeyAndVisible];
        return YES;
    }
     
    - (void)onMain
    {
        Boolean b = [NSThread isMainThread];
        if (b) {
            NSLog(@"onMain;;%d",b);
        }
    }
     
     
    - (void) run:(NSString*)str
    {
        NSLog(@"多线程运行:::%@",str);
    }
    - (void) run2:(NSString*)str
    {
        NSLog(@"多线程运行:::%@",str);
    }
  • 相关阅读:
    KnockoutJS 3.X API 第五章 高级应用(4) 自定义处理逻辑
    KnockoutJS 3.X API 第五章 高级应用(3) 虚拟元素绑定
    KnockoutJS 3.X API 第五章 高级应用(2) 控制后代绑定
    KnockoutJS 3.X API 第五章 高级应用(1) 创建自定义绑定
    KnockoutJS 3.X API 第四章(14) 绑定语法细节
    KnockoutJS 3.X API 第四章(13) template绑定
    KnockoutJS 3.X API 第四章 表单绑定(12) selectedOptions、uniqueName绑定
    KnockoutJS 3.X API 第四章 表单绑定(11) options绑定
    KnockoutJS 3.X API 第四章 表单绑定(10) textInput、hasFocus、checked绑定
    KnockoutJS 3.X API 第四章 表单绑定(9) value绑定
  • 原文地址:https://www.cnblogs.com/iosblogx/p/4474477.html
Copyright © 2011-2022 走看看