这是一个基本问题,但需要澄清一下。
我有这段代码。
//line of code #1
[localContext MR_saveToPersistentStoreWithCompletion:^(BOOL success, NSError *error) {
//line of code #2
}];
代码行#2是完成块吗?我应该在保存之前对实体进行更改,如代码#1所示?
由于
答案 0 :(得分:1)
^(…) { … }
或^{ … }
形式的任何内容都是block。本质上,块是可移植的,不是直接执行的一块代码。可以将块保存到变量中,然后在稍后的时间点执行。
typedef void (^my_block_t)();
my_block_t myBlock = ^{
NSLog(@"I'm in a block");
};
这是一个打印日志语句的块。该块将保存到变量myBlock
。注意:此时,NSLog
不打印任何内容。
稍后某个时间点,myBlock
可以执行。
myBlock();
在代码的这一点上,块运行并且NSLog
打印出它的声明。
如果你的例子,代码行#2的执行被延迟到保存完成之后。
逻辑上,它的工作原理与:
相同步骤1)执行代码#1的行 步骤2)执行保存
步骤3)执行代码#2
因为代码#2中的内容在保存完成后发生,所以此时不会保存对模型的任何更改。