gpt4 book ai didi

objective-c - 使用 block 的目的是什么

转载 作者:太空狗 更新时间:2023-10-30 03:11:10 24 4
gpt4 key购买 nike

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

最佳答案

block 是 closures (or lambda functions ,但是你喜欢称呼他们)。他们的目的是使用 block ,程序员不必在全局范围内创建命名函数或提供目标操作回调,相反他/她可以创建一个未命名的本地“函数”,该函数可以访问其封闭的变量范围并轻松执行操作。

例如,当你想 e. G。分派(dispatch)一个异步操作,例如 View 的动画,没有 block ,并且你想收到竞争通知,你必须写:

[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDelegate:self];
[UIView setAnimationDidStopSelector:@selector(animationDidStop:context:)];
.... set up animation ....
[UIView commitAnimations];

这是很多代码,而且它意味着存在一个有效的 self 指针——它可能并不总是可用的(我在开发 MobileSubstrate-tweaks 时遇到过这样的事情)。因此,您可以使用 iOS 4.0 及更高版本的 block 代替它:

[UIView animateWithDuration:1.0 animations:^{
// set up animation
} completion:^{
// this will be executed on completion
}];

或者,例如,使用 NSURLConnection 加载在线资源... B. b. ( block 之前):

urlConnection.delegate = self;

- (void)connection:(NSURLConnection *)conn didReceiveResponse:(NSURLResponse *)rsp
{
// ...
}

- (void)connection:(NSURLConnection *)conn didReceiveData:(NSData *)data
{
// ...
}

// and so on, there are 4 or 5 delegate methods...

一个。 B.(时间 block ):

[NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *rsp, NSData *d, NSError *e) {
// process request here
}];

更简单、更简洁、更短。

关于objective-c - 使用 block 的目的是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12176961/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com