所以,即時嘗試在數組中建立一個塊隊列,然後在稍後階段執行隊列,隊列在forloop中構建,該forloop使用枚舉在塊中使用的字符串。通過快速枚舉在for循環中使用塊的缺陷
NSArray *array = @[@"test", @"if", @"this", @"works"];
NSMutableArray *queue = [NSMutableArray new];
for(id key in array){
//add the work to the queue
void (^ request)() = ^{
NSLog(@"%@", key);
};
[queue addObject:request];
//request(); //this works fine if i just execute the block here, all the strings are printed
}
for(id block in queue){
void (^ request)() = block;
request(); //this just prints 'works' multiple times instead of all the other strings
}
做塊不能在for循環與枚舉對象的工作(當不在同一個for循環執行),或者這也似乎是一個錯誤嗎?
打開ARC,這不會發生。 –
是的,我們正在將應用程序轉換爲弧形,但它是一個整體項目,所以不那麼容易。我應該在這個問題中提到,我的壞 – Fonix
@JoshCaswell:「這不會發生。」從我對ARC規範的閱讀中,我不能保證。 – newacct