Используя-performSelector: по сравнению только с вызовом метода

Возможно, что-то больше как это?

declare @UpdateTime datetime

set @UpdateTime = getutcdate()

update Table1 set AlertDate = @UpdateTime where AlertDate is null

select ID from Table1 where AlertDate = @UpdateTime
113
задан Keavon 18 May 2014 в 05:43
поделиться

3 ответа

По сути, performSelector позволяет вам динамически определять, какой селектор вызывать селектор для данного объекта. Другими словами, селектор не нужно определять до выполнения.

Таким образом, даже если они эквивалентны:

[anObject aMethod]; 
[anObject performSelector:@selector(aMethod)]; 

Вторая форма позволяет вам сделать это:

SEL aSelector = findTheAppropriateSelectorForTheCurrentSituation();
[anObject performSelector: aSelector];

перед отправкой сообщения.

190
ответ дан 24 November 2019 в 02:42
поделиться

@ennuikiller на высоте. По сути, динамически сгенерированные селекторы полезны, когда вы не знаете (и обычно не можете) знать имя метода, который вы будете вызывать при компиляции кода.

Одно из ключевых отличий заключается в том, что -performSelector: и его друзья (включая многопоточные и отложенные варианты ) несколько ограничены тем, что они разработаны для использования с методами с параметрами 0–2. Например, вызов -outlineView: toolTipForCell: rect: tableColumn: item: mouseLocation: с 6 параметрами и возвращение NSString довольно громоздко и не поддерживается предоставленными методами.

]
12
ответ дан 24 November 2019 в 02:42
поделиться

Селекторы немного похожи на указатели функций в других языках. Вы используете их, когда во время компиляции не знаете, какой метод вы хотите вызвать во время выполнения. Также, как и указатели на функции, они инкапсулируют только глагольную часть вызова. Если у метода есть параметры, вам также необходимо передать их.

NSInvocation служит аналогичной цели, за исключением того, что он связывает воедино больше информации. Он не только включает глагольную часть, но также включает целевой объект и параметры. Это полезно, когда вы хотите вызвать метод для определенного объекта с определенными параметрами не сейчас, а в будущем. Вы можете создать соответствующий NSInvocation и запустить его позже.

4
ответ дан 24 November 2019 в 02:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: