我知道在堆栈中创建了块.但是,由于我对堆栈和局部变量知之甚少,我无法理解为什么我应该将块移动到堆中以获得预期的结果.直观地,我觉得块代码块在堆栈中只有1个实例,这段代码引用了i3次局部变量.如果我将它复制到堆,它将有3个不同的实例,每次它将i在复制过程中捕获3个不同的值.但我真的想更多地了解堆栈中的块代码,堆和引用局部变量.
for (int i=0; i<3; i++)
b[i] = ^{ return i;};
for (int i=0; i<3; i++)
printf("b %d\n", b[i]());
Run Code Online (Sandbox Code Playgroud) 我写了一些代码使用objective-c块,但结果让我很困惑.
@interface MyTest : NSObject
@end
@implementation MyTest
- (void)test {
NSArray *array = [self array1]; // ok
// NSArray *array = [self array2];// crash
// NSArray *array = [self array3];// ok again
dispatch_block_t block0 = (dispatch_block_t)[array objectAtIndex:0];
block0();
dispatch_block_t block1 = (dispatch_block_t)[array objectAtIndex:1];
block1();
}
- (NSArray *)array1 {
int a = 10;
NSMutableArray *array = [NSMutableArray array];
[array addObject:^{
NSLog(@"block0: a is %d", a);
}];
[array addObject:^{
NSLog(@"block1: a is %d", a);
}];
return array;
}
- (NSArray …Run Code Online (Sandbox Code Playgroud)