gpt4 book ai didi

ios - 在方法内部或调用该方法时使用 dispatch_async()

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:42:26 27 4
gpt4 key购买 nike

我正在使用一些下载数据的代码。该代码使用 block 作为回调。有几种代码非常相似的下载方法:在回调 block 中,如果出现问题,它们会显示 UIAlertView。警报 View 始终如下所示:

[req performRequestWithHandler:^(NSData *responseData, NSHTTPURLResponse *urlResponse, NSError *error) {
if(error) {
dispatch_async(dispatch_get_main_queue(), ^{

[[NSNotificationCenter defaultCenter] postNotificationName:kFailed object:nil];
UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"Error"
message:@"Connection failed"
delegate:nil
cancelButtonTitle:@"Ok"
otherButtonTitles:nil];
[alertView show];
});
}
}];

我想将警报 View 代码移动到它自己的方法中,因为它使用相同的参数被调用了多次。我是否应该将 dispatch_async() 也移动到方法中,还是应该将对该方法的调用包装在 dispatch_async() 中?

最佳答案

这与对错无关。

优点:如果将 dispatch_async() 放在方法中,则无论运行在哪个线程中,都可以从程序的每个位置发送消息。

缺点:如果将 dispatch_async() 放在方法中,代码总是异步执行,即使消息是从主线程发送的。 (在这种情况下,根本不需要 dispatch_async() 并且 dispatch_sync() 会死锁。)

反之亦然。

对我来说,不同的东西更重要:定义一层“调度方法”。仅在该层内使用 dispatch_async() 和 dispatch_sync(),而不是在此之上构建的层中,而不是在此之下构建的层中。

从您的软件的更高级别始终使用这一层。在层内仅使用较低层上的方法。

关于ios - 在方法内部或调用该方法时使用 dispatch_async(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16449376/

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