NSThread

在 iOS/macOS 开发中,NSThread 是用于处理多线程操作的基础类,startcancelmain 是其核心方法,各自承担不同职责:

1. start() 方法

  • 作用:启动线程,将线程从 "新建" 状态切换到 "就绪" 状态,等待系统调度执行。

  • 执行流程 :调用 start() 后,系统会在合适时机调用线程的 main() 方法(线程的入口点)。

  • 注意

    • 一个线程对象只能调用一次 start(),重复调用会导致异常。
    • 调用后线程并非立即执行,而是进入系统的线程调度队列,等待 CPU 分配时间片。

2. main() 方法

  • 作用:线程的主执行函数,线程启动后实际运行的代码逻辑都在这里。

  • 使用方式

    • 通常需要子类化 NSThread 并重写 main() 方法,在其中实现具体任务。
    • 也可以通过 NSThread 的初始化方法(如 initWithTarget:selector:object:)指定要执行的方法,替代重写 main()
  • 注意

    • main() 方法执行完毕后,线程会进入 "终止" 状态。
    • 若在 main() 中处理耗时任务,需定期检查线程是否被取消(见 cancel 方法),以便及时退出。

3. cancel() 方法

  • 作用:标记线程为 "取消" 状态,但不会立即终止线程。

  • 工作原理

    • 仅设置线程的 isCancelled 属性为 YES,不会主动中断线程的执行。
    • 需要在 main() 方法中主动检查 isCancelled 状态,若为 YES 则手动退出任务,实现线程终止。
  • 示例

    objective-c

    less 复制代码
    // 子类化 NSThread 并重写 main
    @interface MyThread : NSThread
    @end
    
    @implementation MyThread
    - (void)main {
        // 模拟耗时任务,定期检查是否被取消
        for (int i = 0; i < 1000; i++) {
            // 检查取消状态,若已取消则退出
            if (self.isCancelled) {
                NSLog(@"线程被取消,退出执行");
                return;
            }
            NSLog(@"执行第 %d 步", i);
            [NSThread sleepForTimeInterval:0.1]; // 模拟耗时
        }
    }
    @end
    
    // 使用线程
    MyThread *thread = [[MyThread alloc] init];
    [thread start]; // 启动线程
    
    // 一段时间后取消线程
    [thread cancel];

总结

  • start():启动线程,触发 main() 执行。
  • main():线程的核心逻辑执行处,需包含具体任务代码。
  • cancel():标记线程为取消状态,需配合 isCancelled 检查实现线程退出。
相关推荐
Digitally5 小时前
如何在Windows 10 PC上获取 iPhone短信
ios·iphone
脾气有点小暴6 小时前
uv-drop-down-popup 在 iOS 真机中随屏幕滚动偏移
ios·uniapp·uv
2501_924064116 小时前
2025年移动应用渗透测试流程方案及iOS与Android框架对比
android·ios
tangweiguo030519876 小时前
Objective-C 核心语法深度解析:基本类型、集合类与代码块实战指南
开发语言·ios·objective-c
代码s贝多芬的音符6 小时前
IOS webview打开相机 相册 选择文件上传
数码相机·ios
鹏多多1 天前
Flutter下拉刷新上拉加载侧拉刷新插件:easy_refresh全面使用指南
android·前端·ios
驱动探索者1 天前
[缩略语大全]之[IOS]篇
ios
kkk_皮蛋2 天前
在移动端使用 WebRTC (Android/iOS)
android·ios·webrtc
Swift社区2 天前
如何在 SwiftUI 中对 CoreImage 滤镜做实时预览
ios·swiftui·cocoa
ipad协议开发2 天前
企业微信iPad协议的开发进程
ios·企业微信·ipad