Как делают я называю performSelectorOnMainThread: с селектором, который берет> 1 аргумент?

Вот демонстрация на , Как Создать Соединение с базой данных для MySQL .

, можно загрузить MySQL Connector/J от здесь .

14
задан pablasso 16 November 2011 в 05:28
поделиться

3 ответа

В ответ на аналогичный вопрос о передаче не-объектов методу в performSelectorOnMainThread: я указал на категорию Дейва Дрибина на NSObject , который позволяет вам делать что-то вроде следующего:

[[person dd_invokeOnMainThread] doSomethingWithThing1:thing1 andThing2:thing2 andAlsoThing3:thing3];

для выполнения вашего метода с несколькими аргументами в основном потоке. Думаю, это довольно изящное решение. За кулисами он оборачивает вещи в NSInvocation, вызывая его в основном потоке.

Янтарный каркас также делает нечто подобное.

8
ответ дан 1 December 2019 в 12:13
поделиться

Вы можете сделать это, поместив свои аргументы в словарь или массив и передав их специальной функции

- (void)doStuff:(NSString *)arg1 and:(NSString *)arg2 and:(NSString *)arg3 {
...
}

- (void)doStuff:(NSArray *)argArray {
    [self doStuff:[argArray objectAtIndex:0]
              and:[argArray objectAtIndex:1]
              and:[argArray objectAtIndex:2];
}
15
ответ дан 1 December 2019 в 12:13
поделиться

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

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

Лучшим решением в этом направлении было бы создание класса, который инкапсулирует значения аргументов, то есть строго типизированный подход. Так, например, вместо передачи firstname , surname , вы должны передать экземпляр класса Person . Вероятно, это лучший вариант, потому что методы с меньшим количеством аргументов могут дать более чистый код - но это совсем другая история .

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

Лучшим решением в этой строке было бы создание класс, который инкапсулирует значения аргументов - т.е. строго типизированный подход. Так, например, вместо передачи firstname , surname , вы должны передать экземпляр класса Person . Вероятно, это лучший вариант, потому что методы с меньшим количеством аргументов могут дать более чистый код - но это совсем другая история .

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

Лучшим решением в этой строке было бы создание класс, который инкапсулирует значения аргументов - т.е. строго типизированный подход. Так, например, вместо передачи firstname , surname , вы должны передать экземпляр класса Person . Вероятно, это лучший вариант, потому что методы с меньшим количеством аргументов могут дать более чистый код - но это совсем другая история .

Так, например, вместо передачи firstname , surname , вы должны передать экземпляр класса Person . Вероятно, это лучший вариант, потому что методы с меньшим количеством аргументов могут дать более чистый код - но это совсем другая история .

Так, например, вместо передачи firstname , surname , вы должны передать экземпляр класса Person . Вероятно, это лучший вариант, потому что методы с меньшим количеством аргументов могут дать более чистый код - но это совсем другая история .

1
ответ дан 1 December 2019 в 12:13
поделиться
Другие вопросы по тегам:

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