blocks在Objective-C中是怎么工作的

你真的知道blocks在Objective-C中是怎么工作的吗?

来做个小测试看看吧。

所有的例子都以下版本上测试过。

Apple clang version 4.1 (tags/Apple/clang-421.11.66) (based on LLVM 3.1svn)
Target: x86_64-apple-darwin11.4.2
Thread model: posix

答对三个以上的有机会获得COCO熊一只!一共10只小熊,用你的本事来领回家吧~

blocks在Objective-C中是怎么工作的_第1张图片


例子1
void exampleA() {
  char a = 'A';
  ^{
    printf("%c\n", a);
  }();
}




这个例子:

A.始终能够正常运行                B.只有在使用ARC的情况下才能正常运行
C.不使用ARC才能正常运行   D.永远无法正常运行


例子2:
void exampleB_addBlockToArray(NSMutableArray *array) {
  char b = 'B';
  [array addObject:^{
    printf("%c\n", b);
  }];
}
  
void exampleB() {
  NSMutableArray *array = [NSMutableArray array];
  exampleB_addBlockToArray(array);
  void (^block)() = [array objectAtIndex:0];
  block();
}




A.始终能够正常运行                B.只有在使用ARC的情况下才能正常运行
C.不使用ARC才能正常运行   D.永远无法正常运行



例子3
void exampleC_addBlockToArray(NSMutableArray *array) {
  [array addObject:^{
    printf("C\n");
  }];
}
  
void exampleC() {
  NSMutableArray *array = [NSMutableArray array];
  exampleC_addBlockToArray(array);
  void (^block)() = [array objectAtIndex:0];
  block();
}




A.始终能够正常运行                B.只有在使用ARC的情况下才能正常运行
C.不使用ARC才能正常运行   D.永远无法正常运行


例子4
typedef void (^dBlock)();
  
dBlock exampleD_getBlock() {
  char d = 'D';
  return ^{
    printf("%c\n", d);
  };
}
  
void exampleD() {
  exampleD_getBlock()();
}




A.始终能够正常运行                B.只有在使用ARC的情况下才能正常运行
C.不使用ARC才能正常运行   D.永远无法正常运行



例子5
typedef void (^eBlock)();
  
eBlock exampleE_getBlock() {
  char e = 'E';
  void (^block)() = ^{
    printf("%c\n", e);
  };
  return block;
}
  
void exampleE() {
  eBlock block = exampleE_getBlock();
  block();
}





A.始终能够正常运行                B.只有在使用ARC的情况下才能正常运行
C.不使用ARC才能正常运行   D.永远无法正常运行

你可能感兴趣的:(blocks在Objective-C中是怎么工作的)