我正在阅读 SimpleAudioPlayer 的源代码并发现当 playBlock
尝试将其自身设置为 nil 时,Xcode 会发出警告。
我不知道如何摆脱这个警告,或者我们必须将 playBlock
设置为 nil?
- (void) playFiles:(NSArray*) filesList withCompletionBlock:(CompletionBlock) completion
{
__block int idx = 0;
__block void(^playBlock)();
playBlock = ^() {
if (idx >= filesList.count) {
if (completion) {
completion ( YES );
}
playBlock = nil; //Capturing 'playBlock' strongly in this block is likely to lead to a retain cycle
return ;
}
[self playFile:filesList[idx] withCompletionBlock:^(BOOL completed) {
playBlock ();
}];
idx ++;
};
playBlock ();
}
最佳答案
无需设置 playBlock = nil;
也无需使用 __block
修饰符进行声明。修改后的代码(见下文)编译时没有警告或错误。
- (void) playFiles:(NSArray*) filesList withCompletionBlock:(CompletionBlock) completion
{
__block int idx = 0;
void(^playBlock)();
playBlock = ^() {
if (idx >= filesList.count) {
if (completion) {
completion ( YES );
}
return ;
}
[self playFile:filesList[idx] withCompletionBlock:^(BOOL completed) {
playBlock ();
}];
idx ++;
};
playBlock ();
}
关于ios - 当一个 block 试图将自己设置为 nil 时,如何避免保留循环警告?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27959720/