2

最近、私はいくつかのコードをデバッグしようとしていて、私が間違っていることについて頭がおかしくなりました。私の問題の簡略版は以下のとおりです。

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

問題は、私が実行したいアクションが1回だけ発生するということでした。もちろん、最終的に問題に気付いたのは、forループの最後に誤って余分なセミコロンが含まれていたことです。

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

しかし、それから私は疑問に思いました...なぜそのコードはある種の仕事でさえあったのですか?何が起こっていたのかというと、forループが実行されていて、以下のコードが「匿名ブロック」として実行されていたことがわかりました。

  1. Objective Cの匿名ブロックのポイントは何ですか?それらはいつ/どこで役立ちますか?

  2. 私のコードがXcodeで何らかの警告を生成しないのはなぜですか?コードの古いセクションを中かっこで囲んで、突然匿名ブロックとして実行することができると思いますか?

4

2 に答える 2

6

これらは、変数のスコープに使用できます。これはタイポグラフィのようなものですが、同じタイプの一連のオブジェクトをカスタマイズする必要がある場合に便利で、同じ変数を繰り返し使用できます。たとえば、いくつかを設定しているとしましょう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];
}
于 2012-10-04T17:54:08.157 に答える
0

CLANG_WARN_EMPTY_BODYをオンにすると、これに関する警告が表示されます。Xcodeで有効にできるすべての警告を実際に確認し、有用なものをすべてオンにする必要があります(完全に正常なコードに対して多くの警告を出さないものはすべて)。

この機能自体は、1970年代後半の最初のCバージョンに存在していました。

そして、これが「匿名ブロック」と呼ばれるのを聞いたことがありません。これは複合ステートメントです。ブロックと呼ばれることもありますが、「匿名ブロック」という言葉は聞いたことがありません。

于 2014-04-27T13:17:36.240 に答える