iphone - 多线程在 Objective-C 中是如何工作的?

标签 iphone objective-c ios multithreading

在启动线程的情况下,我还能访问父线程上的方法吗?有没有特定的方法来调用这个方法?如果是这样,它是什么?

注意:在我的场景中,两个线程都用于数据操作,它们不是与接口(interface)相关的线程(我知道这是在 .NET 中考虑的,但不知道它们在 Objective-c 中)。

最佳答案

在这种情况下,最好使用 Grand Central Dispatch (GCD) 而不是直接使用 NSHead 或 NSOperation。

并发概述:http://developer.apple.com/library/ios/#documentation/General/Conceptual/ConcurrencyProgrammingGuide/Introduction/Introduction.html#//apple_ref/doc/uid/TP40008091

Grand Central Dispatch 简介:http://cocoasamurai.blogspot.com/2009/09/guide-to-blocks-grand-central-dispatch.html

对于您的示例,您可以使用对 Grand Central Dispatch 的嵌套调用来实现此功能:

dispatch_queue_t backgroundQueue = dispatch_queue_create("com.example.exampleQueue", 0);

dispatch_async(backgroundQueue, ^{

    // operate on data in the background here
    NSData *stuff = [self doSomethingComplex];

    dispatch_async(dispatch_get_main_queue(), ^{
    // Perform Task back in the main thread
        [viewController updateStuff:stuff];
    });
});

此方法是执行此类任务的首选方法。此外,通过使用 block ,一目了然地理解代码也非常容易,而无需在类中示例多个方法。

关于iphone - 多线程在 Objective-C 中是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6981601/

相关文章:

android - 退出 Expo 后无法运行 React Native 应用程序

iphone - Cocos2d-iPhone:dealloc后调用 "update"

iphone - 我可以检查一个常量来确定设备是否能够进行 Facetime 通话吗?

ios - 在模拟器中使用 Firebase 尝试从照片库上传图像时出现 Swift 4 错误

iphone - YouTube ID 中带有下划线的嵌入视频无法在 iPhone 上使用

ios - 在 Objective-C 中调用 setter

objective-c - 如何在 Objective-C 中正确访问父类的属性?

objective-c - 核心数据 NSFetchRequest 问题

objective-c - 将 CGPoint 转换为 NSValue

iphone - 我们可以从 MKMapView 获取所有的注释 View 吗?