加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-16 07:53:14 所属栏目:百科 来源:网络整理
导读:我已经了解了ObjC中的块,语法清晰简单.我可以看到“块是一个很大的功能,语法是…”几乎到处都是.但是,我错过了他们使用的真正优势. 也许这是一个愚蠢的问题 – 我刚刚从ObjC开始,但是块比“传统”方法真正的优势是什么?有人可以给我一些简短明了的解释吗?
我已经了解了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
    }
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读