我写了以下类别 NSOperationBlock
@implementation NSOperationQueue (Extensions)
-(void)addAsynchronousOperationWithBlock:(void (^)(block))operationBlock
{
dispatch_semaphore_t semaphore = dispatch_semaphore_create(0);
block signal = ^ {
dispatch_semaphore_signal(semaphore);
};
[self addOperationWithBlock:^{
operationBlock(signal);
dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER);
dispatch_release(semaphore);
}];
}
@end
Run Code Online (Sandbox Code Playgroud)
它似乎工作正常,但当我调用它时(如下面的代码段所示)我得到一个警告:
阻止可能会导致保留周期
[_queue addAsynchronousOperationWithBlock:^(block signal) {
[self foo:nil];
signal();
}];
Run Code Online (Sandbox Code Playgroud)
foo 是使用此类别的类的方法.
与addOperationWithBlock:(from NSOperationQueue)相同的代码不显示警告:
[_queue addOperationWithBlock:^ {
[self foo:nil];
}];
Run Code Online (Sandbox Code Playgroud)
我真的不明白.特别是我不明白的是:我是否应该在两种情况下都使用弱指针?实际上,如果我不使用弱指针,两个片段会带来保留周期吗?