首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

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

iOS多线程编程之一——NSThread线程管理 NSTread是iOS中进行多线程开发的一个类,其结构逻辑清晰,使用十分方便,但其封装度和性能不高,线程周期,加锁等需要手动处理。...一、NSThread类方法总结 获取当前线程 + (NSThread *)currentThread; 这个方法通过开启一个新的线程执行选择器方法 + (void)detachNewThreadSelector... *)mainThread; 二、属性与成员方法总结 初始化方法,选择器可以带一个参数 - (instancetype)initWithTarget:(id)target selector:(SEL...performSelectorOnMainThread:(SEL)aSelector withObject:(id)arg waitUntilDone:(BOOL)wait; 这个函数指定在某个线程执行选择器...)wait; 指定在后台线程中执行选择器 - (void)performSelectorInBackground:(SEL)aSelector withObject:(id)arg; 专注技术,热爱生活

36030
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    iOS底层 之 多线程原理(上)

    要分离新线程,只需提供要用作线程入口点的方法名称(指定为选择器)、定义该方法的对象以及要在启动时传递给线程的任何数据. 以下示例显示了此方法的基本调用,该调用使用当前对象的自定义方法生成线程。...NSThread在 OS X v10.5 及更高版本中初始化对象的简单方法是使用 initWithTarget:selector:object:方法。...此方法采用与方法完全相同的信息,detachNewThreadSelector:toTarget:withObject:并使用它来初始化一个新NSThread实例。但是,它不会启动线程。...您使用此技术发送的消息由另一个线程直接执行,作为其正常运行循环处理的一部分。 (当然,这确实意味着目标线程必须在其运行循环中运行;请参阅Run Loops。)...应用程序框架会自动启动应用程序主线程的运行循环。如果您创建任何辅助线程,则必须配置运行循环并手动启动它。 终止线程 退出线程的推荐方法是让它正常退出其入口点例程。

    53630

    Mysql 编译安装并使用自定义用户启动

    本文基于 Redhat Linux 6.7 的环境,Mysql 版本为 5.5.37 安装前的检查 必备的组件,如果没有使用 yum 进行安装,可以使用网上的源,也可以使用本地光盘作为 Yum 源。...如上所述,默认Mysql启动的时候,会从 /etc/my.cnf 或者安装目录的根目录下寻找my.cnf配置文件,如果发现就会使用配置文件中的参数而忽略命令行中的参数,这个特性是困扰很多人或造成问题的根源...设置随系统自启动 让应用随系统自启动一般有两种方法,一种是放到rc.local下面,一种是放在/etc/init.d下面作为系统服务,两种方法都是 root 用户执行的,这里列出第二种方法。...[ OK ] 以后就可以使用 service 命令起停了。 本文为作者原创。...参考资料: 1、installing standar source 2、source configuration options 3、Ignoring user change 4、脚本中实现切换用户并

    77420

    一文教你使用 Docker 启动并安装 Nacos

    在本文中,我们将介绍如何使用 Docker 启动并安装 Nacos。安装 Docker首先,需要安装 Docker。可以通过官方网站下载适合自己操作系统版本的 Docker,并按照其指导进行安装。...可以使用以下命令创建一个名为 nacos_network 的容器网络:docker network create nacos_network步骤 2:启动 Nacos 容器接下来,使用以下命令启动 Nacos...可以使用以下命令停止并删除之前的容器:docker stop nacos && docker rm nacos然后,根据之前的步骤启动 Nacos 容器,并加上以下环境变量:-e SPRING_DATASOURCE_PLATFORM...启动完容器后,就可以在 Nacos Web 控制台中使用 MySQL 数据库存储了。...总结本文介绍了如何使用 Docker 启动并安装 Nacos,并讲解了如何将 Nacos 数据库存储改为 MySQL。

    12.8K13

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

    初始化创建NSThread的方法有如下几种: /* 使用target对象的selector作为线程的任务执行体,该selector方法最多可以接收一个参数,该参数即为argument */ - (instancetype...block作为线程的执行体,并直接启动线程 上面的实例方法返回NSThread对象需要手动调用start方法来启动线程执行任务 */ + (void)detachNewThreadWithBlock:(...start]; //栗子3: /* 通过类方法创建并自动启动一个线程 该线程的执行体即为传入的block */ [NSThread detachNewThreadWithBlock:^{ for...4: /* 通过类方法创建并自动启动一个线程 该线程的执行体为self的firstThread:方法,并传入相关参数 */ [NSThread detachNewThreadSelector:@selector...,启动两个线程,使用for循环来输出文本,并设置不同的优先级,可以发现,优先级高的线程获取到时间片即能够执行输出的机会高于优先级低的。

    1.2K90

    iOS多线程编程之二——NSOperation与NSOperationQueue

    这个类是一个抽象类,通常情况下,我们会使用NSInvocationOperation和NSBlockOperation这两个子类进行多线程的开发,当然我们也可以写继承于NSOperation的类,封装我们自己的操作类...初始化方法: + (instancetype)blockOperationWithBlock:(void (^)(void))block; 在操作中添加block - (void)addExecutionBlock...3、使用NSInvocationOperation调用方法 根据选择器创建一个对象 - (instancetype)initWithTarget:(id)target selector:(SEL)sel... currentThread],i);     } } -(void)log{     for (int i=0; i<10; i++) {         NSLog(@"%@=%d",[NSThread...如有疏漏 欢迎指正 学习使用 欢迎转载 专注技术,热爱生活,交流技术,也做朋友。 ——珲少 QQ群:203317592

    32020

    Bison眼中的iOS开发多线程是这样的(一)

    ; 但是要使用NSThread管理多个线程非常困难,不推荐使用; 技巧!...这俩种创建新线程的方式并没有明显的区别,只是第一种方式是一个实例化方法,该方法返回一个NSThread对象,必须调用 start方法启动线程:另一种不会返回NSThread对象,因此这种方法会直接创建并启动新线程...// 启动新线程 [thread start]; // 创建并启动新线程 // [NSThread detachNewThreadSelector...还用到了 + (NSThread *)currentThread;方法,该方法总是返回当前正在执行的线程对象。 当线程被创建并启动以后,它既不是一启动就进入了执行状态,也不是一直处于执行状态。...当程序创建了一个线程之后,该线程就处于新建状态,此时它和其他Objective-C对象一样,仅仅由系统为其分配了内存,并初始化了其他成员变量的值。

    53850

    iOS-多线程详解

    :@selector(run) toTarget:self withObject:nil]; // 方法三:隐式创建并启动线程 [self performSelectorInBackground:@selector...2.2 NSThread的属性 // 获取当前线程 + (NSThread *)currentThread; // 创建启动线程 + (void)detachNewThreadSelector:...NSOperation的使用(重点) NSOperation 是苹果公司对 GCD 的封装,完全面向对象,并比GCD多了一些更简单实用的功能,所以使用起来更加方便易于理解。...使用NSOperation子类的方式有3种 NSInvocationOperation /* 第一个参数:目标对象 第二个参数:选择器,要调用的方法 第三个参数...,不需要再自己启动了addOperation 内部调用 start方法 start方法 内部调用 main方法 4.3 NSOperation和NSOperationQueue结合使用创建多线程

    2.1K90

    block与GCD--43:NSOperation 与NSOperationQueue

    NSInvocationOperation放到一个NSOperationQueue中,才会异步执行 - (IBAction)invocationOperation:(id)sender { //初始化...{ NSLog(@"-run2--%@",[NSThread currentThread]); } 主队列log.png 自定义队列(系统会自动异步执行NSOperation中的操作) 使用 NSOperation...子类创建操作,并使用 addOperation: 将操作加入到操作队列后能够开启新线程,进行并发执行 - (IBAction)creatOperationQueue1:(id)sender {...当队列调用取消( [self.queue cancelAllOperations])就意味着后续队列不再执行,再次启动需要重新加入队列 - (IBAction)createOperationQueueSuspended...//挂起(暂停队列) self.queue.suspended = YES; } } #pragma mark-设置队列取消(取消就意味着后续队列不再执行,再次启动需要重新加入队列

    14810

    iOS 多线程总结

    ●一个进程要想执行任务,必须至少有一条线程.应用程序启动的时候,系统会默认开启一条线程,也就是主线程 任务 任务就是执行操作的意思,也就是在线程中执行的那段代码。...NSThread NSThread轻量级别的多线程技术 需要自己手动开辟的子线程,如果使用的是初始化方式就需要我们自己启动,如果使用的是构造器方式它就会自动启动。...只要是我们手动开辟的线程,都需要我们自己管理该线程,不只是启动,还有该线程使用完毕后的资源回收。...:@"我是参数"]; // 当使用初始化方法出来的主线程需要start启动 [thread start]; // 可以为开辟的子线程起名字 thread.name = @"NSThread线程"; //...setImage:image forState:UIControlStateNormal]; }); }); 死锁 1、定义: 所谓死锁,通常指有两个线程T1和T2都卡住了,并等待对方完成某些操作

    76650

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

    2、NSThread按钮,是由NSThread方式创建线程并执行相应的操作。     ...一、准备阶段      1.不管使用代码写,还是storyboard或者xib等,先把上面所需的控件初始化好以便使用      2.点击测试UI按钮,改变下边label的颜色的代码如下: 1 //改变...testLabel.backgroundColor = [UIColor greenColor]; 11 i = 1; 12 } 13 14 }     3.从网络上获取图片,并使用主线程显示进程调用情况...创建线程测试,用detachNewThreadSelector方法来创建新的线程会自动启动并执行,而不用调用start方法。...:) toTarget:self withObject:@"NSThread"]; 6 } 7 }     3.NSInvocationOperation的使用,新建一个调用操作,然后添加到队列中执行

    78750

    使用dnSpy对目标程序(EXE或DLL)进行反编译修改并编译运行

    本文使用的工具下载地址为: https://github.com/cnxy/dnSpy/archive/v4.0.0.zip 或 dnSpy官方下载地址: https://github.com/0xd4d...,现在,需要使用dnSpy工具,将内部str的变量改变并在线调试。...三、使用dnSpy工具对程序进行反编译:  ①使用dnSpy工具对刚才生成的ChangeString.exe进行反编译,如下图所示: ?...③将str变量的内容改为“Just For Test”,并点击“编译”按钮,如下图所示: ? ④点击“全部保存”按钮,在弹出的界面保持默认值并点击“确定”按钮,如下图所示: ?...⑤保存完成后,点击“启动”按钮,在弹出的界面保持默认值并点击“OK”按钮,接着自动启动应用程序,如下图所示: ? 程序成功地运行!

    2.5K00

    使用dnSpy对目标程序(EXE或DLL)进行反编译修改并编译运行

    [http://www.cnc6.cn] 本文使用的工具下载地址为: https://github.com/cnxy/dnSpy/archive/v4.0.0.zip 或 dnSpy官方下载地址: https...,现在,需要使用dnSpy工具,将内部str的变量改变并在线调试。...三、使用dnSpy工具对程序进行反编译:  ①使用dnSpy工具对刚才生成的ChangeString.exe进行反编译,如下图所示: ②在Main函数内右键点击菜单,在弹出的上下文菜单中选择“编辑方法...(C#)”,如下图所示: ③将str变量的内容改为“Just For Test”,并点击“编译”按钮,如下图所示: ④点击“全部保存”按钮,在弹出的界面保持默认值并点击“确定”按钮,如下图所示:...⑤保存完成后,点击“启动”按钮,在弹出的界面保持默认值并点击“OK”按钮,接着自动启动应用程序,如下图所示: 程序成功地运行!

    5.7K00

    多线程学习,从未如此容易

    当线程被创建并启动以后,它既不是一启动就进入了执行状态,也不是一直处于执行状态,在线程的生命周期中,它要经过新建(New)、就绪(Runnable)、运行(Running)、阻塞(Blocked)和死亡...尤其是当线程启动以后,它不能一直“霸占”着CPU独自运行,所以CPU需要在多条线程之间切换,于是线程状态也会多次在运行、阻塞之间切换。 1....新建和就绪状态 当程序使用new关键字创建了一个线程之后,该线程就处于新建状态,此时它分配了内存,并初始化了其成员变量值。此时的线程对象没有表现出任何线程的动态特征,程序也不会执行线程的线程执行体。...不过这个方法容易导致死锁,所以程序应该尽量避免使用该方法。 3.当前正在执行的线程被阻塞之后,其他线程就可以获得执行的机会了。被阻塞的线程会在合适时候重新进入就绪状态,注意是就绪状态而不是运行状态。...在了解完多线程的东西,我们先来看看NSThread NSthread 开辟线程的方式 ? 代码注释写的也比较详细,我相信聪明的你,一看就明白,重点我们用NSThread:线程状态演练 ? ? ?

    41230
    领券