首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏Helloted

    多线程(一):NSThread

    currentThread]); return NULL; } 三、NSThread 我们应该避免显式地创建线程,你可以考虑使用异步 API,GCD 方式,或操作对象来实现并发,而不是自己创建一个线程 此外,比如 GCD 和操作对象技术被设计用来管理线程,比通过自己的代码根据当前的负载调整活动线程的数量更高效 1、创建线程的方式 NSThread实例方法: - (instancetype)initWithTarget 2、NSThread线程操作 //取消线程,并不是停止线程,这个只是一个标志位,对应isCanceled - (void)cancel; //启动线程 - (void)start; //判断某个线程的状态的属性 线程分配的内存可能造成泄露,并且其他线程当前使用的资源可能没有被正确清理干净,之后造成潜在的问题 +(void)exit; //获取主线程信息 + (NSThread *)mainThread; / date; 3、设置优先级 较高优先级的线程会比较低优先级的线程具有更多的运行机会 4、线程间的通信 线程间通信分为两种,一个是线程间数据的传递,另外一种是一个线程完成后到另外一个线程继续执行任务,NSThread

    59220编辑于 2022-06-07
  • 来自专栏nimomeng的自我进阶

    NSThread官方文档

    如果你有正在运行的NSThread对象的化,一种可以send消息的方法是使用performSelector:onThread:withObject:waitUntileDone:方法。 在Cocoa下,你可以使用NSThread对象的threadDictionary方法去接收一个NSMutableDictionary对象,理论上就可以给thread添加任何keys了。 Cocoa Threads,你可以使用setThreadPriority:类方法(NSThread)来设置当前运行线程的优先级。

    2.4K30发布于 2018-09-13
  • 来自专栏hrscy

    iOS 多线程--NSThread

    一、创建和启动线程 一个 NSThread 对象代表一条线程。 创建和启动线程 NSThread *thread = [[NSThread alloc] initWithTarget:self selector:@selector(run) object:nil]; [thread start]; //线程一启动,就会在线程 thread 中执行 self 的 run 方法 主线程相关用法 +(NSThread *)mainThread; //获得主线程 -(BOOL )isMainThread; //是否为主线程 +(BOOL)isMainThread; //是否为主线程 获得当前线程 NSThread *current = [NSThread *thread = [[NSThread alloc] initWithTarget:self selector:@selector(run) object:nil]; [thread start];

    57520发布于 2018-08-30
  • 来自专栏進无尽的文章

    多线程-NSThread

    前言 在GCD和NSOperationQueue之前,iOS使用线程一般是用NSThread,而NSThread是对POSIX thread的封装。 默认执行[NSThread exit]方法。 优点: NSThread 比其他两个轻量级,使用简单 缺点: 需要自己管理线程的生命周期、线程同步、加锁、睡眠以及唤醒等。 创建并启动 先创建线程类,再启动 # 创建 NSThread *thread = [[NSThread alloc] initWithTarget:self selector:@selector(run :self withObject:[NSNumber numberWithInt:i]]; NSThread *thread=[[NSThread alloc]initWithTarget:self 的调试意义 首先要说明一下的是,类似[[NSThread currentThread] name] 这样获取到NSThread属性的操作只对 创建的NSThread类有效,对其他多线程(比如通过dispatch_queue_create

    78910发布于 2018-09-12
  • 来自专栏HelloCode开发者学习平台

    多线程——NSThread

    前言 NSThread 基于OC的API,使用其简单,面向对象操作。但线程周期由程序员管理。 优点:轻量级 缺点:需要自己管理线程的生命周期,线程同步。 线程同步对数据的加锁会有一定的系统开销 苹果推荐是用GCD 和 NSOperation 注意: [NSThread currentThread]跟踪任务所在线程,适用于NSThread、NSOperation 、GCD 使用NSThread的线程,不会自动添加autoreleasepool 线程中的自动释放池: @autoreleasepool{}自动释放池。 主线程中是有自动释放池,使用NSThread 和 NSObject 不会有。如果在后台线程中创建了autoreleasepool的对象,需要使用自动释放池,否则会出现内存泄漏。 NSThread 常用属性 NSThread类方法 作用于当前线程 NSThread实例方法 NSThread 详解 线程的生命周期 创建线程的方法 配置线程 启动线程 阻塞线程

    41410编辑于 2023-03-23
  • 来自专栏iOS 技术分享

    iOS - 多线程(二):pthread、NSThread

    NSThread  2.1 NSThread 介绍  2.2 NSThread 的基本使用  2.3 线程的状态、生命周期  2.4 线程池的原理  2.5 线程的属性 相关链接 1. pthread NSThread 2.1 NSThread 介绍 使用更加面向对象; 简单易用,可直接操作线程对象; 语言 OC,线程生命周期由程序员管理,偶尔使用。 2.2 NSThread 的基本使用 方式一:需要手动调用 start 方法开启线程 // SEL NSThread *thread = [[NSThread alloc] initWithTarget [NSThread alloc] initWithBlock:^{ NSLog(@"hello,%@",[NSThread currentThread]); }]; [thread NSThread *thread = [[NSThread alloc] initWithTarget:self selector:@selector(demo) object:nil]; //

    84130发布于 2020-04-16
  • 来自专栏程序员充电站(itcharge)

    iOS多线程:『pthread、NSThread』详尽总结

    NSThread NSThread 是苹果官方提供的,使用起来比 pthread 更加面向对象,简单易用,可以直接操作线程对象。 不过也需要需要程序员自己管理线程的生命周期(主要是创建),我们在开发的过程中偶尔使用 NSThread。比如我们会经常调用[NSThread currentThread]来显示当前的进程信息。 创建线程 NSThread *thread = [[NSThread alloc] initWithTarget:self selector:@selector(run) object:nil]; // ; // 判断是否为主线程(类方法) + (BOOL)isMainThread; // 获得当前线程 NSThread *current = [NSThread currentThread] 我们先来了解一下官方关于 NSThread 的线程间通信的方法。

    1.3K50发布于 2018-05-31
  • 来自专栏HelloWorld杰少

    iOS多线程NSThread,NSOperation和GCD详解

    NSThread NSThread是相对轻量级的多线程开发范式,但使用起来也是相对复杂,我们需要自己去管理线程的生命周期,线程之间的同步。 在iOS开发中我们可以用以下三种形式来实现NSThread: 运行效果如下: 当点击了按钮以后会启动一个新的线程,进行图片的下载,在这期间并不会去阻塞主线程的执行。 NSThread适合轻量级多线程开发,控制线程顺序比较难,同时线程总数无法控制. 使用NSThread的currentThread方法取得当前线程,使用 sleepForTimeInterval:方法让当前线程休眠.

    1.2K20编辑于 2022-08-03
  • 来自专栏iOS 开发杂谈

    iOS多线程之二:NSThread的使用

    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:^{ :(BOOL)wait modes:(nullable NSArray<NSString *> *)array; 三、NSThread的其它一些常用的方法 + (NSThread *)currentThread

    87310发布于 2018-09-11
  • 来自专栏iOS开发笔记

    iOS学习系列之多线程—NSThread(一)

    iOS线程模型 1 NSThread:objective-c线程库 2 Blocks/GCD: Blocks模式的线程池 3 NSOperationQueue: 线程池/线程队列 今天就先从NSThread NSThread NSThread是轻量级的多线程开发,使用起来也并不复杂,但是使用NSThread需要自己管理线程生命周期。 //此方法需要创建后主动调用 NSThread *thread = [[NSThread alloc]initWithTarget:self selector:@selector(threadMethod 常用的操作 //获取当前线程 NSThread *current =[NSThread currentThread]; //获取主线程 NSThread *mainThread = [NSThread date]]; [NSThread sleepUntilDate:date]; PS:暂停线程的方法,是获取执行当前方法对象的线程!

    1.5K50发布于 2018-03-30
  • 来自专栏iOS开发~

    iOS_多线程四:NSThread + performSelector + 总结

    是iOS中轻量级得多线程,一个NSThread对象对应一条线程 1、一些类方法 [NSThread mainThread]; // 获取主线程 [NSThread currentThread]; // 获取当前线程 // 阻塞当前线程,设置休眠时间,两种方式实现: [NSThread sleepForTimeInterval:3]; [NSThread sleepUntilDate:[NSDate // threadPriority相关的都已禁用,改用qualityOfService(枚举)代替 [NSThread threadPriority]; // 获取当前线程优先级 [NSThread 4 <NSThread: 0x600003a41a80>{number = 9, name = 窗口3} // 买了一张,还剩:4 <NSThread: 0x600003a41a00>{number = 7, name = 窗口1} // 买了一张,还剩:2 <NSThread: 0x600003a41a40>{number = 8, name = 窗口2} // 买了一张,还剩:2 <NSThread

    79630编辑于 2022-07-20
  • 来自专栏一“技”之长

    iOS多线程编程之一——NSThread线程管理

    iOS多线程编程之一——NSThread线程管理 NSTread是iOS中进行多线程开发的一个类,其结构逻辑清晰,使用十分方便,但其封装度和性能不高,线程周期,加锁等需要手动处理。 一、NSThread类方法总结 获取当前线程 + (NSThread *)currentThread; 这个方法通过开启一个新的线程执行选择器方法 + (void)detachNewThreadSelector [NSThread detachNewThreadSelector:@selector(log) toTarget:self withObject:nil];     for (int i=0; i<100 ; i++) {         NSLog(@"%@=%d",[NSThread currentThread],i);     } } -(void)log{     for (int i=0; i< 100; i++) {         NSLog(@"%@=%d",[NSThread currentThread],i);     } } 运行后的打印信息: ?

    55130发布于 2018-08-16
  • 来自专栏青玉伏案

    iOS开发之多线程技术(NSThread、OperationQueue、GCD)

    2、NSThread按钮,是由NSThread方式创建线程并执行相应的操作。      currentThread]];    NSLog(@"%@",str); 8 NSData *data; 9 [NSThread sleepForTimeInterval:0.5 代码如下: 1 //NSThread 2 - (IBAction)tapButton2:(id)sender { 3 //点击一次button就创建一个新的线程来请求图片数据 4 for (int i = 0;i < 10; i ++) { 5 [NSThread detachNewThreadSelector:@selector(loadImageWithThreadName :) toTarget:self withObject:@"NSThread"]; 6 } 7 }     3.NSInvocationOperation的使用,新建一个调用操作,然后添加到队列中执行

    97150发布于 2018-01-11
  • 来自专栏iOS技术杂谈

    iOS多线程——你要知道的NSThread都在这里你要知道的iOS多线程NSThread、GCD、NSOperation、RunLoop都在这里

    ,每一个NSThread类的对象即代表一个线程,接下来苹果为开发者封装了GCD(Grand Central Dispatch),GCD相比于NSThread来说,提供了便捷的操作方法,开发者不需要再关注于管理线程的生命周期 NSThread的使用姿势全解 在组织架构说明中讲到,NSThread是对内核mach kernel中的mach thread的封装,所以,每一个NSThread的对象其实就是一个线程,我们创建一个NSThread 接下来继续讲解创建NSThread的其他方法,具体栗子如下: //栗子2: /* 通过传入block的方式创建一个线程,线程执行体即为block的内容 但该方式创建线程无法传入参数 */ NSThread ; 上述把所有NSThread的创建方法都讲解了一遍,实例方法和类方法的区别就在于,实例方法会返回NSThread对象,当需要启动线程时需要手动触发start方法,而类方法没有返回值,创建线程后立即启动该线程 thread1 setName:@"Thread1"]; NSThread *thread2 = [[NSThread alloc] initWithTarget:account selector

    1.4K90发布于 2018-04-10
  • 来自专栏清墨_iOS分享

    iOS多线程-加强理解

    ); }); }); } 1----<NSThread: 0x600001f8d580>{number = 4, name = (null)} 2----<NSThread )} 4----<NSThread: 0x600001f98fc0>{number = 3, name = (null)} 5----<NSThread: 0x600001f98fc0>{number = 3, name = (null)} 6----<NSThread: 0x600001f8d580>{number = 4, name = (null)} 2----<NSThread: 0x6000011af380 >{number = 3, name = (null)} 1----<NSThread: 0x6000011aa780>{number = 4, name = (null)} 3----<NSThread )} 6----<NSThread: 0x6000011aa1c0>{number = 5, name = (null)} 4----<NSThread: 0x6000011af380>{number

    79610发布于 2019-10-25
  • 来自专栏大宇笔记

    GCD swift dispatch_set_target_queue 小例

    : 0x60800007d480>{number = 3, name = (null)} task 2 in ----<NSThread: 0x60800007d540>{number = 4, name currentThread]);         [NSThread sleepForTimeInterval:3.f]; NSLog(@"task 1 out ---- %@",[NSThread ]);         [NSThread sleepForTimeInterval:2.f]; NSLog(@"task 2 out ---- %@",[NSThread currentThread         [NSThread sleepForTimeInterval:1.f]; NSLog(@"task 3 out ---- %@",[NSThread currentThread] 2 in ----<NSThread: 0x60800026bf80>{number = 4, name = (null)} task 3 in ----<NSThread: 0x60800026c080

    82440发布于 2019-01-15
  • 来自专栏大师级码师

    GCD的常用方法总结

    sleepForTimeInterval:1]; // NSLog(@"%@", [NSThread currentThread]); // }); //(2)添加并行队列,同步执行 sleepForTimeInterval:1]; // NSLog(@"%@", [NSThread currentThread]); // }); //(3)参数size_t的作用 的序号 // dispatch_apply(3, queueSerial, ^(size_t t) { // [NSThread sleepForTimeInterval:1]; // NSLog(@"%li == %@", t, [NSThread currentThread]); // }); //(4)以上都是在主线程中进行的。 (group, queueConcu, ^{ // [NSThread sleepForTimeInterval:1]; // NSLog(@"%@", [NSThread

    57300发布于 2021-10-31
  • 来自专栏iOS 技术分享

    iOS - 多线程(四):NSOperation

    currentThread]); } /* 2020-01-20 09:34:21.163313+0800 多线程[28423:6280457] <NSThread: 0x600001482240> currentThread]); } /* 2020-01-20 09:36:06.327162+0800 多线程[28423:6280510] <NSThread: 0x600001419100> currentThread]); } /* 2020-02-03 03:49:07.027372+0800 多线程[11489:1903781] <NSThread: 0x600003ee8140> currentThread]); }]; } /* 2020-01-20 10:16:08.266873+0800 多线程[28609:6320429] <NSThread: ]); }]; [operation addExecutionBlock:^{ NSLog(@"执行任务2,%@",[NSThread currentThread]);

    2K10发布于 2020-04-16
  • 来自专栏mukekeheart的iOS之旅

    iOS学习——(转)多线程

    四、NSThread的使用 No.1:NSThread创建线程   NSThread有三种创建方式: init方式 detachNewThreadSelector创建好之后自动启动 performSelectorInBackground 创建好之后也是直接启动 /** 方法一,需要start */ NSThread *thread1 = [[NSThread alloc] initWithTarget:self selector:@ currentThread]); } No.2:NSThread的类方法 返回当前线程 阻塞休眠 类方法补充 // 当前线程 [NSThread currentThread]; NSLog [NSThread sleepForTimeInterval:2]; //休眠到指定时间 [NSThread sleepUntilDate:[NSDate date]]; //退出线程 [NSThread exit]; //判断当前线程是否为主线程 [NSThread isMainThread]; //判断当前线程是否是多线程 [NSThread isMultiThreaded]; //主线程的对象 No

    1.5K20发布于 2018-08-01
  • 来自专栏哈雷彗星撞地球

    GCD API 记录 (三)

    0, 0); for (int i = 0; i < 5; i++) { dispatch_group_async(group, queue, ^{ [NSThread sleepForTimeInterval:i]; NSLog(@"并发%d结束----线程:%@", i,[NSThread currentThread]); sleepForTimeInterval:index]; NSLog(@"并发%zu---%@",index,[NSThread currentThread]); }); NSLog(@"done - %@",[NSThread currentThread]); }); NSLog(@"主线程"); // 输出结果: 2016-07 currentThread]); [NSThread sleepForTimeInterval:6 - i]; NSLog(@"完成任务

    70931发布于 2018-08-22
领券