Поиск…


Объект NSInvocation-C

См. Это оригинальное сообщение от e.James

Согласно ссылке класса NSInvocation от Apple :

NSInvocation - это сообщение Objective-C, статичное, т. NSInvocation Это действие, превращенное в объект.

И, немного подробнее:

Концепция сообщений занимает центральное место в философии объектива-c. Каждый раз, когда вы вызываете метод или получаете доступ к переменной какого-либо объекта, вы отправляете ему сообщение. NSInvocation пригодится, когда вы хотите отправить сообщение объекту в другой момент времени или отправить одно и то же сообщение несколько раз. NSInvocation позволяет вам описать сообщение, которое вы собираетесь отправить, и затем вызывать его (фактически отправить его на целевой объект) позже.


Например, предположим, вы хотите добавить строку в массив. Обычно вы отправляете сообщение addObject: следующим образом:

[myArray addObject:myString];

NSInvocation вы хотите использовать NSInvocation для отправки этого сообщения в какой-то другой момент времени:

Во-первых, вы должны подготовить объект NSInvocation для использования с NSMutableArray : addObject: selector:

NSMethodSignature * mySignature = [NSMutableArray
    instanceMethodSignatureForSelector:@selector(addObject:)];
NSInvocation * myInvocation = [NSInvocation
    invocationWithMethodSignature:mySignature];

Затем вы должны указать, какой объект отправить сообщение:

[myInvocation setTarget:myArray];

Укажите сообщение, которое вы хотите отправить этому объекту:

[myInvocation setSelector:@selector(addObject:)];

И заполните любые аргументы для этого метода:

[myInvocation setArgument:&myString atIndex:2];

Обратите внимание, что аргументы объекта должны передаваться указателем. Спасибо Райану МакКуаигу за указание на это, и, пожалуйста, см . Документацию Apple для получения более подробной информации.

На этом этапе myInvocation является полным объектом, описывающим сообщение, которое может быть отправлено. Чтобы отправить сообщение, вы должны позвонить:

[myInvocation invoke];

Этот последний шаг приведет к отправке сообщения, по существу выполняя [myArray addObject:myString]; ,

Подумайте, как отправить электронное письмо. Вы открываете новое электронное письмо (объект NSInvocation ), заполняете адрес человека (объекта), которому вы хотите его отправить, введите сообщение для получателя (укажите selector и аргументы), а затем нажмите «отправить», (вызов invoke ).

Дополнительную информацию см. В разделе Использование NSInvocation .


NSUndoManager использует объекты NSInvocation чтобы он мог отменить команды. По существу, вы делаете создание объекта NSInvocation чтобы сказать: «Эй, если вы хотите отменить то, что я только что сделал, отправьте это сообщение этому объекту с этими аргументами». Вы предоставляете объект NSInvocation для NSUndoManager и добавляет этот объект в массив отмененных действий. Если пользователь вызывает «Отменить», NSUndoManager просто ищет последнее действие в массиве и вызывает сохраненный объект NSInvocation для выполнения необходимых действий.

Подробнее см. « Регистрация операций отмены» .



Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow