相关疑难解决方法(0)

块和堆栈

我知道在堆栈中创建了块.但是,由于我对堆栈和局部变量知之甚少,我无法理解为什么我应该将块移动到堆中以获得预期的结果.直观地,我觉得块代码块在堆栈中只有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 objective-c-blocks

9
推荐指数
1
解决办法
1246
查看次数

关于objective-c阻止和复制的一些问题

我写了一些代码使用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)

block objective-c

5
推荐指数
1
解决办法
555
查看次数

标签 统计

objective-c ×2

block ×1

objective-c-blocks ×1