Как сделать базовый конечный автомат в Objective-C

Если проблема заключается в дополнительном времени компиляции и раздувании бинарного размера, полученном путем компиляции .h как части всех используемых им .cpp-модулей, во многих случаях то, что вы можете сделать, - это сделать класс шаблона опустившимся из не-шаблонного базовый класс для не зависящих от типа частей интерфейса, и что базовый класс может иметь свою реализацию в файле .cpp.

30
задан Community 23 May 2017 в 11:47
поделиться

3 ответа

Когда вы используете протокол в качестве модификатора типа, вы можете предоставить список протоколов, разделенных запятыми. Итак, все, что вам нужно сделать, чтобы избавиться от предупреждения компилятора, - это добавить NSObject в список протоколов, например:

- (void)setupTimer:(id<TimerState,NSObject>) timerState {

    // Create scheduled timers, etc...
}
8
ответ дан 28 November 2019 в 00:17
поделиться

Я предлагаю использовать Конечный автомат компилятора , он выведет код Objective-C . Я добился хороших успехов в Java и Python, используя это.

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

15
ответ дан 28 November 2019 в 00:17
поделиться

Я довольно новичок в Objective-C, но я бы посоветовал вам посмотреть на прямую реализацию ANSI C для машины состояний.

То, что вы используете Cocoa, не означает, что вы должны использовать здесь сообщения Objective-C.

В ANSI C реализация машины состояний может быть очень простой и читабельной.

В моей последней реализации FSM на языке C для состояний указывались #define STATE_x или перечислялись типы, и была таблица указателей на функции для выполнения каждого состояния.

1
ответ дан 28 November 2019 в 00:17
поделиться
Другие вопросы по тегам:

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