在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 } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |