gpt4 book ai didi

ios - 如何同步使用 AFNetworking 2.0 库?

转载 作者:行者123 更新时间:2023-11-29 03:36:40 26 4
gpt4 key购买 nike

以下使用 AFNetworking 2.0 的代码可有效通过互联网获取数据:

NSString *URLPath = @"http://www.raywenderlich.com/downloads/weather_sample/weather.php?format=json";
NSDictionary *parameters = nil;

[[AFHTTPRequestOperationManager manager] GET:URLPath parameters:parameters success:^(AFHTTPRequestOperation *operation, id responseObject) {
NSLog(@"success: %@", responseObject);

} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
NSLog(@"failure: %@", error);
}];

但是我想在单元测试中同步测试那些请求。但是当像这样使用 GCD 信号量时它会被阻塞:

// This code would be blocked.
dispatch_semaphore_t sema = dispatch_semaphore_create(0);

NSString *URLPath = @"http://www.raywenderlich.com/downloads/weather_sample/weather.php?format=json";
NSDictionary *parameters = nil;

[[AFHTTPRequestOperationManager manager] GET:URLPath parameters:parameters success:^(AFHTTPRequestOperation *operation, id responseObject) {
NSLog(@"success: %@", responseObject);
dispatch_semaphore_signal(sema);

} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
NSLog(@"failure: %@", error);
dispatch_semaphore_signal(sema);

}];

dispatch_semaphore_wait(sema, DISPATCH_TIME_FOREVER);
dispatch_release_ARC_compatible(sema);

如何使用 AFNetworking 2.0 库同步获取数据(在 Kiwi 中测试这些代码)?

最佳答案

您的信号量将被阻止,因为默认情况下 AFNetworking 在主循环上运行。因此,如果您正在等待信号量的主循环,AFNetworking 的代码将永远不会运行。

为了解决这个问题,您只需告诉 AFNetworking 使用不同的调度队列即可。您可以通过设置operationQueue来做到这一点属性(property) AFHTTPRequestOperationManager

您可以创建自己的调度队列,或使用预定义队列之一,如下所示:

// Make sure that the callbacks are not called from the main queue, otherwise we would deadlock
manager.operationQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);

关于ios - 如何同步使用 AFNetworking 2.0 库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19086036/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com