iOS
NSInvocation
Поиск…
Объект 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
для выполнения необходимых действий.
Подробнее см. « Регистрация операций отмены» .