Согласно Ссылка Apple на класс NSInvocation :
NSInvocation
- это сообщение Objective C, отображаемое как статическое, то есть это действие, превращенное в объект.
И, в немного более подробно:
Концепция сообщений является центральной в философии объективной с. Каждый раз, когда вы вызываете метод или обращаетесь к переменной какого-либо объекта, вы отправляете ему сообщение. NSInvocation
пригодится, если вы хотите отправить сообщение объекту в другой момент времени или отправить одно и то же сообщение несколько раз. NSInvocation
позволяет вам описать сообщение, которое вы собираетесь отправить, а затем вызвать его (фактически отправить его целевому объекту) позже.
Например, допустим, вы хотите добавить строку в массив. Обычно вы отправляете сообщение addObject:
следующим образом:
[myArray addObject:myString];
Теперь предположим, что вы хотите использовать NSInvocation
для отправки этого сообщения в другой момент времени:
Сначала вы должны подготовить объект NSInvocation
для использования с селектором NSMutableArray
addObject:
:
NSMethodSignature * mySignature = [NSMutableArray
instanceMethodSignatureForSelector:@selector(addObject:)];
NSInvocation * myInvocation = [NSInvocation
invocationWithMethodSignature:mySignature];
Далее вы должны указать, на какой объект отправлять сообщение:
[myInvocation setTarget:myArray];
Укажите сообщение, которое вы хотите отправить этому объекту:
[myInvocation setSelector:@selector(addObject:)];
И укажите аргументы для этого метода:
[myInvocation setArgument:&myString atIndex:2];
Обратите внимание, что аргументы объекта должны передаваться указателем. Спасибо Ryan McCuaig за указание на это, и, пожалуйста, смотрите документацию Apple для более подробной информации.
На этом этапе myInvocation
представляет собой законченный объект, описывающий сообщение, которое можно отправить. Чтобы на самом деле отправить сообщение, вы должны позвонить:
[myInvocation invoke];
Этот последний шаг приведет к отправке сообщения, по сути, выполнив [myArray addObject:myString];
.
Думайте об этом, как об отправке электронного письма. Вы открываете новое электронное письмо (NSInvocation
объект), вводите адрес человека (объекта), которому хотите его отправить, вводите сообщение для получателя (укажите selector
и аргументы), а затем нажмите «отправить» (позвоните invoke
).
См. Использование NSInvocation для получения дополнительной информации.
См. Использование NSInvocation , если выше не работает.
NSUndoManager
использует NSInvocation
объекты, так что он может обратить команды. По сути, вы создаете NSInvocation
объект, который говорит: «Эй, если вы хотите отменить то, что я только что сделал, отправьте это сообщение этому объекту с этими аргументами». Вы передаете объект NSInvocation
NSUndoManager
, и он добавляет этот объект в массив отменяемых действий. Если пользователь вызывает «Undo», NSUndoManager
просто ищет самое последнее действие в массиве и вызывает сохраненный объект NSInvocation
для выполнения необходимого действия.
Подробнее см. Регистрация операций отмены .