微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在Objective-C中使用块的真正优点是什么?

我已经了解了ObjC中的块,语法清晰简单.我可以看到“块是一个很大的功能,语法是…”几乎到处都是.但是,我错过了他们使用的真正优势.

也许这是一个愚蠢的问题 – 我刚刚从ObjC开始,但是块比“传统”方法真正的优势是什么?有人可以给我一些简短明了的解释吗?

解决方法

任何你可以做的块,你可以做没有他们.但是它们提供了一个很好的方式来简化代码并使事情更清晰.例如,假设您有一个URL连接,并希望等待结果.两种流行的方法是提供委托回调或使用块.我将使用虚构的URLConnection类作为例子.
URLConnection* someConnection = [[[URLConnection alloc] initWithURL:someURL] autorelease];
someConnection.delegate = self;
[someConnection start];

然后你班上的其他地方

- (void)connection:(URLConnection)connection didFinishWithData:(NSData*)
{
    // Do something with the data
}

相比之下,当您使用块时,您可以在创建连接的位置嵌入被调用代码.

URLConnection* someConnection = [[[URLConnection alloc] initWithURL:someURL] autorelease];
someConnection.successBlock = ^(NSData*)data {
    // Do something with the data
};
[someConnection start];

此外,假设您的课堂中有多个连接使用相同的委托.现在你必须在委托方法中区分它们.这可能会变得越来越复杂.并且一个块,您可以为每个URL连接分配一个唯一的块.

- (void)connection:(URLConnection)connection didFinishWithData:(NSData*)
{
    if(connection == self.connection1)
    {
        // Do something with the data from connection1
    }
    if(connection == self.connection2)
    {
        // Do something with the data from connection2
    }
    if(connection == self.connection3)
    {
        // Do something with the data from connection3
    }
}

原文地址:https://www.jb51.cc/c/115502.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐