`
dcj3sjt126com
  • 浏览: 1881756 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

ios线程的五种使用方式

    博客分类:
  • IOS
 
阅读更多
 //第一种方式  手动创建并启动
    NSThread *t = [[NSThread alloc] initWithTarget:self selector:@selector(method) object:nil];
    [t start];
    
    //第二种方式  类方法
    [NSThread detachNewThreadSelector:@selector(method) toTarget:self withObject:nil];
    
    //第三种方式  类方法
    [self performSelectorInBackground:@selector(method) withObject:nil];
    
    //第四种方式 block 语法
    NSOperationQueue *operationQueue = [[NSOperationQueue alloc] init];
    //会开启一个多线程,调用block
    [operationQueue addOperationWithBlock:^{
        for (int i=0; i<50; i++) {
            NSLog(@"多线程:%d", i);
        }
    }];
    
    //第五种  线程队列(线程池)
    NSOperationQueue *operationQueue2 = [[NSOperationQueue alloc] init]; //相当于一个线程池,里面可以放很多线程,这个线程池管理多个线程的调度,可以给线程设置优先级,并发数
    operationQueue2.maxConcurrentOperationCount = 1;  //设置最大并发数量(并发=同时进行)
    
    //创建线程
    NSInvocationOperation *operation1 = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(thread1) object:nil];
    //设置线程的优先级
    [operation1 setQueuePriority:NSOperationQueuePriorityVeryLow];
    
    NSInvocationOperation *operation2 = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(thread1) object:nil];
    [operation2 setQueuePriority:NSOperationQueuePriorityVeryHigh];
    
    //将线程添加到线程池
    [operationQueue2 addOperation:operation1];
    [operationQueue2 addOperation:operation2];
    
    
    //----------------------回到主线程--------------------------------
    
    //在多线程中可能加载数据,加载完了之后要刷新ui, ui必须在主线程上面操作,在多线程的方法中这样调用
    [self performSelectorOnMainThread:@selector(thread1) withObject:nil waitUntilDone:YES];
    
    
    //-----------------第六种线程的使用方式--------------
    //这个函数是C的函数,字符串test也要用C里面的字符串,是不带@符号的
    dispatch_queue_t queue = dispatch_queue_create("test", NULL);
    dispatch_async(queue, ^{
        for (int i=0; i<50; i++) {
            NSLog(@"多线程:%d", i);
        }
        //回到主线程执行
        dispatch_async(dispatch_get_main_queue(), ^{
            if ([NSThread isMainThread]) {
                NSLog(@"是主线程");
            }
        });
    });

 

-(void)thread1 {
    //这里是开启了一个新的线程,所以新的线程跟主线程脱离关系了,这个里面的内存管理,我们需要自己创建一个自动释放池
    //创建自动释放池
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
    
    NSLog(@"执行多线程");
    
    [pool release];
}

 

分享到:
评论

相关推荐

    ios多线程开发的常用四种方式和基本使用

    本文将深入探讨四种常用的iOS多线程开发方式:pthread、NSThread、NSOperation及NSOperationQueue,以及Grand Central Dispatch(GCD)。 首先,让我们了解下pthread。pthread是POSIX线程库,它在iOS中被用于跨平台...

    IOS线程管理,线程同步

    线程的创建通常有两种方式:一种是使用NSThread类,另一种是利用GCD(Grand Central Dispatch)中的队列。NSThread允许我们直接创建和管理线程,比如可以通过`-[NSThread init]`初始化线程,然后调用`-[NSThread ...

    IOS多线程理解

    本文将深入探讨iOS的三种主要多线程编程方式:NSThread、NSOperation和NSOperationQueue,以及Grand Central Dispatch (GCD)。 首先,NSThread是iOS中的一种基本线程实现。通过创建NSThread对象,我们可以简单地...

    iOS线程同步方案

    在iOS开发中,多线程技术是不可或缺的一部分,它能够有效地提升应用的性能,通过并发执行任务来提高用户体验。然而,多线程同时也带来了线程安全的问题,这就需要我们掌握线程同步方案来确保数据的一致性和完整性。...

    ios多线程编程

    在Cocoa框架中,有多种方式来实现线程安全,包括使用Foundation框架、ApplicationKit框架和CoreData框架中的线程安全机制。同时,iOS还提供了一些高级并发编程特性,如使用GCD和Operation Objects。 GCD和Operation...

    iOS 常驻线程开启方式

    Apple的Foundation框架提供了NSThread类,它提供了一种更面向对象的方式来处理线程。创建常驻线程可以这样操作: - 创建一个继承自NSThread的子类,并重写`main`方法来定义线程执行的任务。 - 初始化并启动线程...

    iOS两个线程间嵌套发送同步消息的demo

    在iOS开发中,多线程技术是不可或缺的...总的来说,理解并正确使用线程间的同步消息是iOS开发中的高级技能,它涉及到并发控制、死锁预防等多个核心概念。通过学习和实践,开发者能够编写出更加健壮、高效的多线程应用。

    iOS多线程Demo

    总之,“iOS多线程Demo”是一个很好的学习资源,它涵盖了iOS多线程开发的基础和实践,包括NSOperationQueue、GCD和NSThread的使用,以及多线程下的UI更新和线程安全。通过这个Demo,开发者可以更深入地理解多线程...

    iOS 多线程编程指南 pdf

    iOS多线程编程指南是一份深入介绍iOS平台下多线程编程技术的文档。文档主要涵盖的技术点包括NSThread、NSOperation以及Grand Central Dispatch(GCD),这些技术是iOS开发者在开发应用程序时常用的技术。 首先,...

    iOS 多线程运用

    在iOS开发中,多线程是一项至关重要的技术,它能够使应用...通过深入研究这些示例,开发者可以更好地掌握iOS多线程的使用,提升应用的性能和响应速度。在实际项目中,灵活运用多线程技术,将使代码更加高效且易于维护。

    iOS 线程资料汇总

    本文将深入探讨iOS线程的概念、使用方法,以及并发编程的相关知识。 一、线程基础 线程是操作系统分配CPU时间片的基本单位,一个进程中可以有多个线程并行执行任务。在iOS应用中,主线程主要负责UI更新和事件处理,...

    哈哈iOS多线程面试题

    NSThread提供了一种轻量级的方式来创建和管理线程,程序员可以手动创建子线程并负责其生命周期。NSoperationQueue则利用队列管理任务,支持操作之间的依赖关系,并提供取消和暂停功能。GCD是苹果推出的一种高性能的...

    iOS线程读写安全

    本文将深入探讨iOS中的线程读写安全,包括读写锁和栅栏函数的使用,以及如何保证公共资源的安全。 首先,我们要理解线程安全的基本概念。线程安全是指当多个线程访问同一块资源时,代码能够正确地处理并发情况,...

    ios 多线程编程指南

    iOS提供了多种方式来创建和管理线程,包括使用NSThread、POSIX的多线程、Cocoa程序中的NSObject类方法,以及在Cocoa程序上面使用POSIX线程。 #### 1.5 设计技巧 在多线程编程中,避免创建过多的线程,确保线程合理...

    iOS控制多线程任务数量

    总结,iOS中的GCD提供了一种优雅的方式来管理和控制多线程任务。通过设置自定义队列的最大并发数,我们可以限制同时运行的任务数量,优化性能并防止系统资源过度消耗。`ZKRGlobalQueue^()`以及对应的`ZKRQueueAsync`...

    iOS多线程编程指南

    - **RunLoop**: iOS中的一种机制,用于管理线程的执行周期,使得线程可以在等待外部事件的同时保持活跃状态。 - **RunLoop模式**: 包括默认模式、UI模式等,用于定义线程的运行方式。 **1.4.3 同步工具** - **锁**:...

    ios多线程资料01

    本文将根据"ios多线程资料01"的标题和描述,深入探讨iOS平台上的多线程概念、实现方式以及性能优化策略。 首先,我们要理解什么是多线程。在计算机程序中,线程是程序执行的基本单元,一个进程可以包含多个线程。在...

    iOS多线程 (pthread,NSThread)简单Demo

    在iOS开发中,多线程技术是不可或...通过阅读和运行这些代码,你可以更好地理解和掌握这两种多线程实现方式的使用场景和优缺点。在实践中,根据具体需求选择合适的多线程方案至关重要,以确保应用程序的性能和稳定性。

    ios 开发多线程

    本文将深入探讨iOS中的多线程技术,包括NSOperation和GCD(Grand Central Dispatch)两种主要的实现方式,以及如何在多线程环境中进行网络图片的下载。 一、NSOperation和NSOperationQueue NSOperation是苹果提供...

    ios的三种多线程技术

    #iOS的三种多线程技术 和特性 1.NSThread 2.NSOperation/NSOperationQueue 3.GCD (大中心调度)

Global site tag (gtag.js) - Google Analytics