iOS多线程编程(二)------ NSThread

iOS多线程开发一 使用NSThread 因为这个在实际开发项目中用的不多,所以会简单使用就好

一、NSThread(显示创建线程) 有两种方式创建线程,在主线程中更新UI,只能传一个参数,停止线程调用exist方法

    1.类方法 +(void)detachNewThreadSelector:(SEL)selector toTarget:(id)target withObject:(id)argument
        例: [NSThread detachNewThreadSelector:@selector(loadImage) toTarget:self withObject:nil];

    2.对象方法 -(instancetype)initWithTarget:(id)target selector:(SEL)selector object:(id)argument 此方法需要对象启动线程
        例: NSThread *thread = [[NSThread alloc] initWithTarget:self selector:@selector(loadImage) object:nil];
            // 启动线程,注意 启动项线程并非一定立即执行,而是出于就绪状态,当系统调度时才真正执行
            [thread start];
    3、当线程执行完,需要在把数据显示到UI控件时,因为只能在主线程中更新UI 所以需要调用NSObject的分类方法
    [self performSelectorOnMainThread:@select(updateImage:) withObject:data waitUntiDone:Yes];

    4、因为NSThread只能传一个参数,如果咬传递多个参数,使用封装对象 传一个对象然后自己分解; 也可以指定某个线程优先执行

    5、在运行的时候,停止没有完成的线程操作。 线程状态分为isExecuting(正在执行)、 isFinished(已经完成)、isCancelled(已经取消)三种。其中取消状态程序可以干预设置,只要调用线程cancel方法即可。但是需要注意在主线程中仅仅能设置线程状态,并不能真正停止当前线程,如果要终止线程必须在线程中调用exist方法,这是一个静态方法,调用该方法可以退出当前线程。

    6NSThread相关属性及方法
 // 获取/设置线程的名字
 @property (copy) NSString *name NS_AVAILABLE(10_5, 2_0);

/** 
  *  获取当前线程的线程对象
  *  通过这个属性可以查看当前线程是第几条线程,主线程为1。
  *  可以看到当前线程的序号及名字,主线程的序号为1,依次叠加。
  */
+ (NSThread *)currentThread;

// 线程休眠(秒)
+ (void)sleepForTimeInterval:(NSTimeInterval)ti;

// 线程休眠,指定具体什么时间休眠
+ (void)sleepUntilDate:(NSDate *)date;

// 退出线程
// 注意:这里会把线程对象销毁!销毁后就不能再次启动线程,否则程序会崩溃。
+ (void)exit;

二、NSObject(隐式创建线程):苹果官方对NSObject进行分类扩张,为了简化多线程开发过程, 可以直接使用下面的几个方法

    - (void)performSelectorInBackground:(SEL)aSelector withObject:(id)arg 在后台执行一个操作,本质就是重新创建一个线程执行当前的方法
    - (void)performSelector:(SEL)aSelector onThread:(NSThread *)thr withObject:(id)arg waitUntilDone:(BOOL)wait:在指定的线程上执行一个方法,需要用户创建一个线程对象。
    - (void)performSelectorOnMainThread:(SEL)aSelector withObject:(id)arg waitUntilDone:(BOOL)wait:在主线程上执行一个方法

三、优缺点
优点:NSThread比其他两种多线程方案较轻量级,更直观地控制线程对象
缺点:需要自己管理线程的生命周期,线程同步。线程不同对数据的加锁会有一定的系统开销。

四、demo地址(先看MainViewController注释)
http://download.csdn.net/detail/yj229201093/9609394

参考链接
http://www.cnblogs.com/kenshincui/p/3983982.html

不足之处还望指出

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

建古

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值