我已经了解了ObjC中的块,语法清晰简单.我几乎可以在任何地方阅读"块是一个很棒的功能,语法是......".但是,我想念他们使用的真正优势.
也许这是一个愚蠢的问题 - 我刚开始使用ObjC,但是块的真正优势在于"传统"方法?谁能给我一些简短而明确的解释?
DHa*_*ick 28
你可以用块做任何事情,没有它们你可以做.但它们提供了一种简化代码并使事情更清晰的好方法.例如,假设您有一个URL连接,并希望等待结果.两种流行的方法是提供委托回调或使用块.我将使用虚构的URLConnection类作为示例.
URLConnection* someConnection = [[[URLConnection alloc] initWithURL:someURL] autorelease];
someConnection.delegate = self;
[someConnection start];
Run Code Online (Sandbox Code Playgroud)
然后在你班上的其他地方
- (void)connection:(URLConnection)connection didFinishWithData:(NSData*)
{
// Do something with the data
}
Run Code Online (Sandbox Code Playgroud)
相比之下,当您使用块时,可以在创建连接的位置嵌入被调用的代码.
URLConnection* someConnection = [[[URLConnection alloc] initWithURL:someURL] autorelease];
someConnection.successBlock = ^(NSData*)data {
// Do something with the data
};
[someConnection start];
Run Code Online (Sandbox Code Playgroud)
此外,假设您的班级中有多个连接都使用相同的委托.现在,您必须在委托方法中区分它们.这可能会使你越多越复杂.使用块,您可以为每个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
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6891 次 |
| 最近记录: |