gpt4 book ai didi

ios - 从 completionHandler 中调用 UIView 相关调用?

转载 作者:可可西里 更新时间:2023-11-01 05:10:28 24 4
gpt4 key购买 nike

我正在从我的 ViewController 初始化方法中调用以下类方法:

[NSURLConnection sendAsynchronousRequest:urlrequest 
queue:opQueue
completionHandler:^(NSURLResponse *response, NSData *data, NSError*error){


// Update an NSMutableArray (an Instance variable

[self tableView] reloadData]; // is this ok to call?
}];

此代码按预期工作并且 tableView 适当刷新,我担心:此调用线程安全吗?可以从完成 block 访问 UI 元素吗?

谢谢,

红酒

最佳答案

实际上,这是不正确的,除非 opQueue 恰好是 +[NSOperationQueue mainQueue]

该完成 block 将安排在您提供的队列中。在您的情况下,您将该队列称为“opQueue”。如果该队列正在被主线程以外的某个线程排空,那么您不应该进行该调用以在那里重新加载 TableView 。

您应该改为执行您需要执行的任何处理,然后在调用重新加载的主队列中加入另一个 block 。

^(NSURLResponse *response, NSData *data, NSError*error){

// Do some processing work in your completion block

dispatch_async(dispatch_get_main_queue(), ^{

// Back on the main thread, ask the tableview to reload itself.
[someTableView reloadData];

});
}

或者如果处理轻而快(并且时间固定),那么只需将 mainQueue 作为“opQueue”传递即可;

我希望这是有道理的。在这里可以找到很多有用的信息:Concurrency Programming Guide

关于ios - 从 completionHandler 中调用 UIView 相关调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8450056/

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