#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.