gpt4 book ai didi

ios - block 可能会导致保留周期

转载 作者:可可西里 更新时间:2023-11-01 06:18:29 27 4
gpt4 key购买 nike

<分区>

我为 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

它似乎工作正常但是当我调用它时(如以下代码片段所示)我收到警告:

block is likely to lead a retain cycle

[_queue addAsynchronousOperationWithBlock:^(block signal) {
[self foo:nil];
signal();
}];

foo 是使用该类别的类的方法。

addOperationWithBlock: 相同的代码(来自 NSOperationQueue)不显示警告:

[_queue addOperationWithBlock:^ {
[self foo:nil];
}];

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

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com