对象的销毁虽然消耗资源不多,但累积起来也是不容忽视的。通常当容器类持有大量对象时,其销毁时的资源消耗就非常明显。同样的,如果对象可以放到后台线程去释放,那就挪到后台线程去。
这里有个小 Tip:把对象捕获到 block 中,然后扔到后台队列去随便发送个消息以避免编译器警告,就可以让对象在后台线程销毁了。
例子:NSArray *tmp = self.array;
self.array = nil;
dispatch_async(queue, ^{
[tmp class];
});
原理:self.array已经提前置为了nil,证明这个对象已经销毁了。然后tmp被 [tmp class]所在的block强引用,这个block会被追加到后台队列去执行,执行期间block一直对tmp强引用,block执行完毕后会被释放,block引用的对象也会被释放,所以达到了在后台线程销毁对象的目的。