相关疑难解决方法(0)

阻止可能会导致保留周期

我写了以下类别 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)

我真的不明白.特别是我不明白的是:我是否应该在两种情况下都使用弱指针?实际上,如果我不使用弱指针,两个片段会带来保留周期吗?

objective-c nsoperationqueue ios objective-c-blocks

3
推荐指数
1
解决办法
2546
查看次数