我知道一个块是Objective-C中可重用的可执行代码块。有没有理由我不应该在函数中放入相同的代码块,只是在需要运行代码时调用函数?
答案 0 :(得分:14)
这取决于你想要完成的事情。关于块的一个很酷的事情是它们捕获局部范围。您可以使用函数实现相同的最终结果,但最终必须执行诸如传递充满相关值的上下文对象之类的操作。使用块,您可以执行此操作:
int num1 = 42;
void (^myBlock)(void) = ^{
NSLog(@"num1 is %d", num1);
};
num1 = 0; // Changed after block is created
// Sometime later, in a different scope
myBlock(); // num1 is 42
因此,只需使用变量num1,就可以捕获myBlock定义时的值。
来自Apple的documentation:
块是传统回调函数的有用替代品 两个主要原因:
它们允许您在调用时编写代码 稍后在方法实现的上下文中执行。块是 因此通常是框架方法的参数。
- 醇>
他们允许访问本地变量。而不是使用回调 需要一个体现所有上下文的数据结构 执行操作所需的信息,您只需访问本地 变量直接。
答案 1 :(得分:4)
正如Brad Larson对this answer回复的评论:
块将允许您定义响应的响应 事件,但不是你写一个单独的方法或功能, 它们允许您在设置的位置编写处理代码 该事件的倾听者。这可以节省一大堆代码并使你的 应用程序更有条理。
我能给你的一个很好的例子是警报视图,如果我在创建警报视图时决定当我解雇时会发生什么,而不是我编写委托方法并等待调用。因此,理解和实施起来会更容易,而且它也能提供快速处理。