在Objective-C中通过块捕获变量的语义是什么?
#import <Foundation/Foundation.h> #include <stdio.h> int main() { NSMutableArray *arr = [NSMutableArray array]; for (int i = 0; i < 100; ++i) { int j = i; [arr addObject:^(void) {printf("%d %d\n",i,j); }]; } for (void (^blk)(void) in arr) { blk(); } }
我正在考虑打印这样的东西:
100 0 100 1 ... 100 99
相反,它打印:
99 99 99 99 ... 99 99
怎么可能将j解释为等于99? j在for循环之外甚至不活着.
解决方法
因为你没有使用ARC!没有它,您的块不会被复制.你很幸运,每次都跑到最后一个街区.