gpt4 book ai didi

objective-c - objective-c 中多线程的正确方法?

转载 作者:搜寻专家 更新时间:2023-10-30 19:42:07 24 4
gpt4 key购买 nike

我有一个显示图像的 UITableView。每个单元格都有一个图像,每次加载一个单元格时,我都会在后台调用一个选择器(来自 cellForRowAtIndexPath),如下所示:

[self performSelectorInBackground:@selector(lazyLoad:) withObject:aArrayOfData];

唯一的问题是有时我会崩溃(因为我正在后台更改数据,而数据正试图在别处读取)。这是错误:

*** Terminating app due to uncaught exception 'NSGenericException', reason: '*** Collection <CALayerArray: 0xce1a920> was mutated while being enumerated.'

在后台更新数据的时候,是不是应该移到主选择器上去改?或者我应该以不同的方式调用 @selector() 吗?

谢谢!

最佳答案

如果您可以将操作留在主线程上并且没有延迟或问题,那么您就完成了。

但是:假设您已经完成了该操作并遇到了问题。答案是:不要修改惰性加载的数组。切换到主线程修改数组。在这里查看 Brad 的回答:

https://stackoverflow.com/a/8186206/8047

找到一种使用 block 来完成此操作的方法,这样您就可以将对象发送到主队列(您可能还应该首先使用 GCD 来调用延迟加载,但这不是必需的)。

关于objective-c - objective-c 中多线程的正确方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10256170/

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