zoukankan      html  css  js  c++  java
  • ios专题 - 多线程非GCD(1)

    iOS多线程初体验是本文要介绍的内容,iPhone中的线程应用并不是无节制的,官方给出的资料显示iPhone OS下的主线程的堆栈大小是1M第二个线程开始都是512KB。并且该值不能通过编译器开关或线程API函数来更改。只有主线程有直接修改UI的能力

    一、 NSOperation和NSOperationQueue

    1、一个继承自  NSOperation的操作类,该类的实现中必须有 - (void)main方法的。

    2、使用NSOperation的最简单方法就是将其放入NSOperationQueue中。

    一旦一个操作被加入队列,该队列就会启动并开始处理它(即调用该操作类的main方法)。一旦该操作完成队列就会释放它。

    3、可以给操作队列设置最多同时运行的操作数: [queue setMaxConcurrentOperationCount:2];

    二、NSThread

    1、线程创建与启动

    线程创建主要有二种方式:

    1. - (id)init; // designated initializer  
    2. - (id)initWithTarget:(id)target selector:(SEL)selector object:(id)argument; 

    当然,还有一种比较特殊,就是使用所谓的convenient method,这个方法可以直接生成一个线程并启动它,而且无需为线程的清理负责。这个方法的接口是:

    1. + (void)detachNewThreadSelector:(SEL)aSelector toTarget:(id)aTarget withObject:(id)anArgument 

    前两种方法创建后,需要手动启动,启动的方法是:

    1. - (void)start; 

    2、线程的同步与锁

    iphone提供了NSCondition对象接口实现同步与锁。查看NSCondition的接口 说明可以看出,NSCondition是iphone下的锁对象,所以我们可以使用NSCondition实现iphone中的线程安全。

    三、线程的交互

    线程在运行过程中,可能需要与其它线程进行通信,如在主线程中修改界面等等,可以使用如下接口:

    1. - (void)performSelectorOnMainThread:(SEL)aSelector withObject:(id)arg waitUntilDone:(BOOL)wait
  • 相关阅读:
    在VS Code中配置GO开发环境并调试
    go文件操作实践[读写zip tar xlsx文件]
    go 文件操作实践[读写json xlm gob txt]
    go inject 实践
    go的反射reflect
    go goroutine channel 和C# Task BlockingCollection 以及python该如何实现
    beego redis作为缓存
    beego Session redis存储以及是否阻塞
    Beego generate自动生成代码 以及注解路由 @router
    bee go用base64Captcha生成base64的验证码
  • 原文地址:https://www.cnblogs.com/luoguoqiang1985/p/3465278.html
Copyright © 2011-2022 走看看