Что такое ‘^’ в Objective-C

#objective-c

#objective-c

Вопрос:

Что означает ‘^’ в приведенном ниже коде?

 @implementation AppController

- (IBAction) loadComposition:(id)sender
{
    void (^handler)(NSInteger);

    NSOpenPanel *panel = [NSOpenPanel openPanel];

    [panel setAllowedFileTypes:[NSArray arrayWithObjects: @"qtz", nil]];

    handler = ^(NSInteger result) {
        if (result == NSFileHandlingPanelOKButton) {
            NSString *filePath = [[[panel URLs] objectAtIndex:0] path];
            if (![qcView loadCompositionFromFile:filePath]) {
                NSLog(@"Could not load composition");
            }
        }
    };

    [panel beginSheetModalForWindow:qcWindow completionHandler:handler];
}
@end
  

===
Я искал и искал — это какая-то конкретная ссылка на память?

Ответ №1:

Прочитайте об этом здесь. Это «блочный объект», который в основном представляет собой лямбда-форму и был введен для поддержки GCD Snow Leopard (Grand Central Dispatch).

Ответ №2:

Небольшое отступление: символ ‘^’ (каретка или сгибающий символ) имеет другое значение при использовании в качестве двоичного оператора:

 a ^ b
  

означает a XOR Или b. XOR (он же исключающее ИЛИ) — это двоичная арифметическая операция, где результат имеет значение 1 в любой битовой позиции, где либо a, либо b имели значение 1, но не оба.

Ответ №3:

Это блок (он же closure), расширение C, созданное Apple.

Ответ №4:

Это блок, вероятно, предназначенный для использования с Grand Central Dispatch.