在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
    }
}

相关文章

本程序的编译和运行环境如下(如果有运行方面的问题欢迎在评...
水了一学期的院选修,万万没想到期末考试还有比较硬核的编程...
补充一下,先前文章末尾给出的下载链接的完整代码含有部分C&...
思路如标题所说采用模N取余法,难点是这个除法过程如何实现。...
本篇博客有更新!!!更新后效果图如下: 文章末尾的完整代码...
刚开始学习模块化程序设计时,估计大家都被形参和实参搞迷糊...