前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >多线程——NSThread

多线程——NSThread

作者头像
CC老师
发布2023-03-23 19:29:06
2650
发布2023-03-23 19:29:06
举报
文章被收录于专栏:HelloCode开发者学习平台

前言

NSThread 基于OC的API,使用其简单,面向对象操作。但线程周期由程序员管理。

优点:轻量级 缺点:需要自己管理线程的生命周期,线程同步。线程同步对数据的加锁会有一定的系统开销

苹果推荐是用GCD 和 NSOperation

注意: [NSThread currentThread]跟踪任务所在线程,适用于NSThread、NSOperation、GCD 使用NSThread的线程,不会自动添加autoreleasepool 线程中的自动释放池: @autoreleasepool{}自动释放池。主线程中是有自动释放池,使用NSThread 和 NSObject 不会有。如果在后台线程中创建了autoreleasepool的对象,需要使用自动释放池,否则会出现内存泄漏。当自动释放池销毁时,对池中的所有对象发送release消息,清空自动释放池。当所有的autorelease对象,在出了作用域后,会自动添加到最近一次创建的自动释放池中。

NSThread 常用属性
NSThread类方法 作用于当前线程
NSThread实例方法
NSThread 详解
线程的生命周期
  • 创建线程的方法
  • 配置线程
  • 启动线程
  • 阻塞线程
  • 取消线程
  • 强制退出线程
NSThread的其他操作
  • 与主线程相关
  • 与当前线程相关
  • 判断线程的状态
  • 线程同步
  • 原因:多个线程访问同一资源,很可能会引起数据错乱和数据安全问题
  • 解决方案:使用互斥锁来解决互斥资源访问问题,iOS中通常使用@synchronized(锁){}对临界资源进行锁定,通常使用self作为锁
  • 注意:由于线程同步会消耗大量的资源,应尽量避免多个线程访问同一资源,且通常将线程同步的逻辑交由服务器端实现
线程之间的通信
  • 从子线程回到主线程
  • 从一个线程到另一个线程(包括主线程)

也可以通过NSPort对象实现通信

反思
资源共享
  • 1块资源可能会被多个线程共享,也就是多个线程可能会访问同一块资源
  • 当多个线程访问同一块资源时,很容易引发数据错乱和数据安全问题
解决办法互斥锁
  • 互斥锁使用格式

1.@synchronized(锁对象) { // 需要锁定的代码 } 2.只用一把锁,多锁是无效的

  • 互斥锁的优缺点

优点:能有效防止因多线程抢夺资源造成的数据安全问题 缺点:需要消耗大量的CPU资源

  • 互斥锁的使用前提:多条线程抢夺同一块资源
练习

1.iOS经典案例 下载图片 2.算法经典案例 卖票的例子

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-01-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 逻辑iOS技术号 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
    • NSThread 常用属性
      • NSThread类方法 作用于当前线程
        • NSThread实例方法
          • NSThread 详解
            • 线程的生命周期
            • NSThread的其他操作
            • 线程之间的通信
          • 反思
            • 资源共享
            • 解决办法互斥锁
          • 练习
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档