我已经了解了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 } }