Objective c 目标C:匿名块,为什么和什么时候?

Objective c 目标C:匿名块,为什么和什么时候?,objective-c,c,xcode,block,Objective C,C,Xcode,Block,最近,我试着调试一些代码,但我的头脑却困惑于我做错了什么。我的问题的简化版本如下: for(int x = 0; x < [myArray count]; x++); { //perform some action } for(int x=0;x

最近,我试着调试一些代码,但我的头脑却困惑于我做错了什么。我的问题的简化版本如下:

for(int x = 0; x < [myArray count]; x++);
{
    //perform some action
}
for(int x=0;x<[myArray count];x++);
{
//执行一些操作
}
问题是我想执行的操作只会发生一次。当然,我最终注意到问题是我在for循环的末尾意外地包含了一个额外的分号

for(int x = 0; x < [myArray count]; x++);<---- Oops!
{
    //perform some action
}

for(int x=0;x<[myArray count];x++) 它们可用于确定变量的范围。虽然它更像是一种排版,但当您需要自定义一系列相同类型的对象时,它会很方便,允许您重复使用相同的变量。例如,假设您正在设置一些
NSURLRequests

NSMutableArray *requests = [NSMutableArray array];
{
    NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init];
    request.URL = [NSURL URLWithString:@"http://A"];
    request.HTTPMethod = @"GET";
    [requests addObject:request];
}
// ... etc
{
    NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init];
    request.URL = [NSURL URLWithString:@"http://Z"];
    request.HTTPMethod = @"POST";
    [requests addObject:request];
}

打开“叮当”警告“清空身体”,您将收到警告。您应该仔细检查所有可以在Xcode中启用的警告,并打开所有有用的东西(对于非常好的代码,没有给出很多警告的东西)

这个特性本身在20世纪70年代末的第一个C版本中就已经出现了


从未听说过这被称为“匿名街区”。这是一个复合陈述。有时它被称为块,但我从未听说过“匿名块”这个词

我只是用它们来限制局部变量的范围,这与Objective-C本身完全无关。这是C99和C90的一项功能。和C89。还有前ANSI C…嗯,好的。我想我看到了它们的用处,尽管就我个人而言,我并不特别关心它们。这似乎是对代码的过度组织。你可以在书架上按作者/主题对书籍进行分类,但匿名的范围划分块感觉就像在每本书之间放置了一个额外的塑料分隔物;只是有点过度。注意:称之为过度,但必须对变量编号
request1
request2
。。。这可能会很痛苦,尤其是当你输入了一个拼写错误,而编译器没有对此抱怨时。请确保您以编译器可以帮助您的方式编写代码。没错,但当决定让编译器能够帮助您确定匿名块的范围时,它还取消了编译器使用我的原始代码检测问题的能力,因此我怀恨在心:)