我有一个类的10个实例,需要执行一些后台任务。这应该针对实例连续发生,但是可以是并发的,即实例可以彼此独立地工作。
哪个在速度和电池方面最具成本效益?我什么时候需要担心我创造了太多队列?
这一个(A)?
- (dispatch_queue_t)queue
{
static dispatch_queue_t queue;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
queue = dispatch_queue_create("no.agens.someclass.somequeue", DISPATCH_QUEUE_SERIAL);
});
return queue;
}
或者这个(B)?
// assume read-only property of 'queue' is defined
- (dispatch_queue_t)queue
{
if(_queue == nil)
{
_queue = dispatch_queue_create("no.agens.someclass.somequeue", DISPATCH_QUEUE_SERIAL);
}
return _queue;
}
答案 0 :(得分:3)
你想要(B)。 (A)将创建一个队列,并将序列化跨所有实例的工作,而不仅仅是每个实例。队列非常轻量级。除非这是一个类,你将同时拥有数千个实例,我不会担心每个实例有一个队列的开销。