Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 使用块的目的是什么_Objective C_Cocoa Touch_Block_Objective C Blocks - Fatal编程技术网

Objective c 使用块的目的是什么

Objective c 使用块的目的是什么,objective-c,cocoa-touch,block,objective-c-blocks,Objective C,Cocoa Touch,Block,Objective C Blocks,我想在我的应用程序中使用块,但我对块一无所知。有人能解释我应该如何以及为什么在代码中使用块吗?块是,不管你怎么称呼它们)。它们的目的是使用块,程序员不必在全局范围内创建命名函数或提供目标操作回调,相反,他/她可以创建一个未命名的局部“函数”,该函数可以访问其封闭范围内的变量并轻松执行操作 例如,当你想要e。G调度一个异步操作,例如视图动画,没有块,并且您希望收到竞争通知,您必须编写: [UIView beginAnimations:nil context:NULL]; [UIView setAn

我想在我的应用程序中使用块,但我对块一无所知。有人能解释我应该如何以及为什么在代码中使用块吗?

块是,不管你怎么称呼它们)。它们的目的是使用块,程序员不必在全局范围内创建命名函数或提供目标操作回调,相反,他/她可以创建一个未命名的局部“函数”,该函数可以访问其封闭范围内的变量并轻松执行操作

例如,当你想要e。G调度一个异步操作,例如视图动画,没有块,并且您希望收到竞争通知,您必须编写:

[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDelegate:self];
[UIView setAnimationDidStopSelector:@selector(animationDidStop:context:)];
.... set up animation ....
[UIView commitAnimations];
这是大量的代码,而且它意味着存在一个有效的
self
指针-这可能并不总是可用的(我在开发MobileSubstrate调整时遇到过这种情况)。因此,您可以使用iOS 4.0及更高版本的块来代替此功能:

[UIView animateWithDuration:1.0 animations:^{
    // set up animation
} completion:^{
    // this will be executed on completion
}];
或者,例如,使用NSURLConnection加载联机资源。。。B.B。(街区前):

A.B.(安诺区块):

更简单、更干净、更短。

引用

块是一级函数,这是一种奇特的说法 块是规则的Objective-C对象。因为它们是物体,所以 可以作为参数传递,从方法和函数返回,以及 分配给变量。块在其他语言中称为闭包 例如Python、Ruby和Lisp,因为它们在 它们已申报。块创建任何局部变量的常量副本 在其范围内引用的。在街区之前,当你 想调用一些代码,让它稍后再给你回电话,你会 通常使用委托或NSNotificationCenter。效果很好, 除非它把你的代码传播到所有地方——你在一个地方开始一项任务, 并用另一种方法处理结果

例如,使用块的视图内动画使您不必执行所有这些操作:

[UIView beginAnimations:@"myAnimation" context:nil];
[UIView setAnimationDelegate:self];
[UIView setAnimationDuration:0.5];
[myView setFrame:CGRectMake(30, 45, 43, 56)];
[UIView commitAnimations];
要做到这一点:

[UIView animateWithDuration:0.5 delay:0.0 options:UIViewAnimationOptionCurveEaseInOut animations:^{
    [myView setFrame:CGRectMake(54, 66, 88, 33)];
}completion:^(BOOL done){
    //
}];

Objective-C类定义了一个将数据与相关行为相结合的对象。有时候,仅仅代表一项任务或一个行为单元,而不是一组方法是有意义的。

它们让你的生活轻松多了!这就像Javascript中的闭包。您可以传递的代码片段。它们帮助我为每次回拨编写委托方法。有关更多信息,请参阅Paul Hegarty的iOS开发课程,
[UIView beginAnimations:@"myAnimation" context:nil];
[UIView setAnimationDelegate:self];
[UIView setAnimationDuration:0.5];
[myView setFrame:CGRectMake(30, 45, 43, 56)];
[UIView commitAnimations];
[UIView animateWithDuration:0.5 delay:0.0 options:UIViewAnimationOptionCurveEaseInOut animations:^{
    [myView setFrame:CGRectMake(54, 66, 88, 33)];
}completion:^(BOOL done){
    //
}];