我有一个绝对庞大的数组(大约1000万个对象本身拥有大量数据)。销毁此对象会导致主线程延迟大约5秒。虽然这只是对大数据的测试用例,但我希望能够A)更好的时间进行破坏,或者B)在某些后台线程上将其推迟。我不太了解内存收集的运行时要求,但想要一个更好的解决方案,只需旋转5秒钟。
所以问题是如何在没有面对主线程上的长析构函数等待的情况下销毁非常大的对象。我正在使用ARC,并且在合理的时间调用析构函数(设置为nil)。还有其他人处理过这件事吗?是否有针对此类情况的设计原则或其他策略。
以下是我在分析时所看到的内容
答案 0 :(得分:2)
我能够让事情发挥作用并在后台线程上发布,例如:
__block MyHugeObject* lastResults = self.localHugeObject; //retain it for the block
self.localHugeObject = nil;//clear local copy
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), ^{
lastResults = nil;//release on a background thread
});