zoukankan      html  css  js  c++  java
  • iOS-多线程 ,整理集锦,多种线程的创建

     1 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
     2 {
     3     self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];
     4     
     5     //创建线程的第一种方式
     6     NSThread *thread = [[NSThread alloc] initWithTarget:self selector:@selector(run:) object:@"universe"];
     7     [thread start];
     8     [thread release];
     9     
    10     
    11     //创建线程的第二种方式,NSThread类方法
    12     [NSThread detachNewThreadSelector:@selector(run:) toTarget:self withObject:@"yuzhou"];
    13     
    14     
    15     //创建线程的第三种方法  NSObject方法
    16     [self performSelectorInBackground:@selector(run:) withObject:@"nsobject thread"];
    17     
    18     //创建线程的第四种方式
    19     NSOperationQueue *oprationQueue = [[NSOperationQueue alloc] init];
    20     [oprationQueue addOperationWithBlock:^{
    21         //这个block语句块在子线程中执行
    22         NSLog(@"oprationQueue");
    23     }];
    24     [oprationQueue release];
    25     
    26     //第五种创建线程的方式
    27     NSOperationQueue *oprationQueue1 = [[NSOperationQueue alloc] init];
    28     oprationQueue1.maxConcurrentOperationCount = 1;//指定池子的并发数
    29     
    30     //NSOperation 相当于java中的runnable接口,继承自它的就相当一个任务
    31     NSInvocationOperation *invation = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(run:) object:@"invation"];
    32     [oprationQueue1 addOperation:invation];//将任务添加到池子里面,可以给池子添加多个任务,并且指定它的并发数
    33     [invation release];
    34     
    35     //第二个任务
    36     NSInvocationOperation *invation2 = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(run2:) object:@"invocation2"];
    37     invation2.queuePriority = NSOperationQueuePriorityHigh;//设置线程优先级
    38     [oprationQueue1 addOperation:invation2];
    39     [invation2 release];
    40     
    41     [oprationQueue1 release];
    42     
    43     //调用主线程,用来子线程和主线程交互,最后面的那个boolean参数,如果为yes就是等这个方法执行完了在执行后面的代码;如果为no的话,就是不管这个方法执行完了没有,接着往下走
    44     [self performSelectorOnMainThread:@selector(onMain) withObject:self waitUntilDone:YES];
    45     
    46     //---------------------GCD----------------------支持多核,高效率的多线程技术
    47     //创建多线程第六种方式
    48     dispatch_queue_t queue = dispatch_queue_create("name", NULL);
    49     //创建一个子线程
    50     dispatch_async(queue, ^{
    51         // 子线程code... ..
    52         NSLog(@"GCD多线程");
    53         
    54         //回到主线程
    55         dispatch_sync(dispatch_get_main_queue(), ^{//其实这个也是在子线程中执行的,只是把它放到了主线程的队列中
    56             Boolean isMain = [NSThread isMainThread];
    57             if (isMain) {
    58                 NSLog(@"GCD主线程");
    59             }
    60         });
    61     });
    62     
    63     
    64     self.window.backgroundColor = [UIColor whiteColor];
    65     [self.window makeKeyAndVisible];
    66     return YES;
    67 }
    68 
    69 - (void)onMain
    70 {
    71     Boolean b = [NSThread isMainThread];
    72     if (b) {
    73         NSLog(@"onMain;;%d",b);
    74     }
    75 }
    76 
    77 - (void) run:(NSString*)str
    78 {
    79     NSLog(@"多线程运行:::%@",str);
    80 }
    81 
    82 - (void) run2:(NSString*)str
    83 {
    84     NSLog(@"多线程运行:::%@",str);
    85 }
    86 这些都是基本的线程创建,用NSThread来进行创建线程比较简单,如果是单一的创建线程可以用NSThread。直接创建可以使用。只需把线程执行的函数和方法写入即可创建一个线程出来。。
    87   
    View Code
  • 相关阅读:
    iot 表索引dump《2》
    heap表和iot表排序规则不同
    Cannot complete the install because one or more required items could not be found.
    iot表输出按主键列排序,heap表不是
    iot 表主键存放所有数据,且按数据插入顺序排序
    iot表和heap表排序规则不同
    org.eclipse.graphiti.ui.editor.DiagramEditorInput.
    Oracle 排序规则
    perl 异步超时 打印错误
    14.6.3 Grouping DML Operations with Transactions 组DML操作
  • 原文地址:https://www.cnblogs.com/Wild-orangutans/p/3824366.html
Copyright © 2011-2022 走看看