Объяснение Какао @selector использование

Используйте subprocess.check_call , передайте список аргументов, и вы можете добавить переменную где угодно:

from subprocess import check_call

check_call(["shutdown", some_var ,"-s", "-t" "10", "-c"])

24
задан mshafrir 13 February 2009 в 02:46
поделиться

6 ответов

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

Примеры:

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

[object respondsToSelector:@selector(methodName)]

Хранилище метод для позже обращения к объекту;

SEL method = @selector(methodName);
[object performSelector:method];

Вызов метод на другом потоке (полезный для работы GUI).

[object performSelectorOnMainThread:@selector(methodName)]
40
ответ дан Andrew Grant 28 November 2019 в 23:13
поделиться

В дополнение к тому, что было сказано, вы можете также обернуть @selector в NSInvocation для дальнейшего использования. Вы можете установить аргументы для NSInvocation в течение длительного времени после его создания и активировать его, когда вам нужно, чтобы сообщение было запущено. Это дает вам много силы.

Для введения в концепцию, Скотт Стивенсон имеет отличный пост под названием «Динамическая цель-C с NSInvocation» .

4
ответ дан Brad Larson 28 November 2019 в 23:13
поделиться

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

2
ответ дан mouviciel 28 November 2019 в 23:13
поделиться

Одна ссылка для взгляда на:

http://en.wikipedia.org/wiki/Multiple_dispatch

2
ответ дан sergtk 28 November 2019 в 23:13
поделиться

Вы можете использовать селектор для вызова метода объекта - это обеспечивает основу для реализации шаблона проектирования целевого действия в Какао.

[myObject performSelector:@selector(runMYmethod:) withObject:parameters];

эквивалентно:

[myObject runMYmethod:parameters];
0
ответ дан morroko 28 November 2019 в 23:13
поделиться

Одним из практических примеров является метод validateMenuItem , в котором пункты меню идентифицируются с их целевыми действиями.

Упрощенный пример:

- (BOOL)validateMenuItem:(NSMenuItem *)item {
    if ([item action] == @selector(selectFiles:) && otherCondition) {
        return YES;
    } else {
        return NO;
    }
}
2
ответ дан 28 November 2019 в 23:13
поделиться
Другие вопросы по тегам:

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