IOS 中如何进行多线程编程?有哪些注意事项?代码举例讲解

在 IOS 中有几种常用的多线程方案:

  1. NSThread:最基本的线程类,可以直接创建线程并执行任务。
objc
NSThread *thread = [[NSThread alloc] initWithTarget:self selector:@selector(doTask) object:nil];
[thread start];

- (void)doTask {
    // 执行任务
}
  1. GCD:Grand Central Dispatch,作废底层 API 形式提供的多线程功能。GCD 共有异步(dispatch_async)同步(dispatch_sync)两种方式。
objc
// 异步执行任务
dispatch_async(dispatch_get_global_queue(0, 0), ^{
    // 执行任务
});  

// 同步执行任务
dispatch_sync(dispatch_get_global_queue(0, 0), ^{
    // 执行任务
});
  1. NSOperation / NSOperationQueue:封装 GCD,提供更高级的多线程接口。
objc 
// 创建操作  
MyOperation *op = [[MyOperation alloc] init];

// 添加到队列
NSOperationQueue *queue = [[NSOperationQueue alloc] init];  
[queue addOperation:op];

在 iOS 多线程编程时,有几点需要注意:

  1. 不要在非主线程中进行 UI 操作,这会导致异常。
  2. 资源使用需加锁,如修改字典、数组时使用 lock。
  3. 使用 GCD 时dispatch_get_main_queue() 切换到主线程。
  4. 避免线程阻塞,否则会影响 App 性能。
  5. 线程安全,某些类线程不安全,使用时需注意。

多线程使得 App 可以同时执行多个任务,大大提高性能。但如果不当使用也会导致许多问题,需要谨慎考虑。