IOS在另一个线程中解析JSON数据?

IOS在另一个线程中解析JSON数据?,ios,multithreading,ios5,location,Ios,Multithreading,Ios5,Location,我目前正在开发一个应用程序,当位置发生变化时,该应用程序正在解析APPdelegate类中的一些JSON数据 我的问题是:“最合适的方法是什么?”当前,当解析数据时,应用程序会“冻结”直到数据加载 我需要一些建议:) 谢谢使用NSOperation来处理它 您可以按照本教程进行操作: 苹果文档:当然有几种方法,包括NSThread、NSOperation和老式的libpthread。但我发现最方便的(特别是对于简单的后台任务)是libdispatch,也称为 使用调度队列,您可以快速地将耗时的任

我目前正在开发一个应用程序,当位置发生变化时,该应用程序正在解析APPdelegate类中的一些JSON数据

我的问题是:“最合适的方法是什么?”当前,当解析数据时,应用程序会“冻结”直到数据加载

我需要一些建议:)


谢谢

使用
NSOperation
来处理它

您可以按照本教程进行操作:


苹果文档:

当然有几种方法,包括
NSThread
NSOperation
和老式的
libpthread
。但我发现最方便的(特别是对于简单的后台任务)是
libdispatch
,也称为

使用调度队列,您可以快速地将耗时的任务委托给单独的线程(或者更准确地说,执行队列-GCD决定它是线程还是异步任务)。以下是最简单的示例:

// create a dispatch queue, first argument is a C string (note no "@"), second is always NULL
dispatch_queue_t jsonParsingQueue = dispatch_queue_create("jsonParsingQueue", NULL);

// execute a task on that queue asynchronously
dispatch_async(jsonParsingQueue, ^{
    [self doSomeJSONReadingAndParsing];

    // once this is done, if you need to you can call
    // some code on a main thread (delegates, notifications, UI updates...)
    dispatch_async(dispatch_get_main_queue(), ^{
        [self.viewController updateWithNewData];
    });
});

// release the dispatch queue
dispatch_release(jsonParsingQueue);

上述代码将在单独的执行队列中读取JSON数据,而不会阻塞UI线程。这只是一个简单的示例,GCD还有很多内容,因此请查看文档以了解更多信息。

您将希望使用
NSURConnections
并异步获取数据(或类似第三方库)来获取数据。如果您在主线程中执行所有操作,您的用户界面将冻结,直到它处理加载和解析等操作。那么,看一看。最后一点,苹果给了你想要的:)

做得很好:)我会仔细研究:)谢谢,我会仔细研究:)