Обратите внимание, что я почти исключительно работаю над приложениями "бизнес / утилита / производительность"; вещи, которые в значительной степени зависят от довольно стандартных элементов пользовательского интерфейса и ожидают хорошей интеграции с их платформой. Этот ответ отражает это. См. Комментарий Митча Линдгрена к ответу Shaggy Frog для хороших комментариев для разработчиков игр, у которых совершенно другая ситуация.
Я считаю, что @ Shaggy Frog здесь не так. Если у вас есть эффективный, проверенный код на C ++, нет причин не делить его между Android и iPhone, и я работал над проектами, которые делают именно это, и он может быть очень успешным. Однако следует избегать опасностей.
Наиболее важно быть осторожным с «наименьшим общим знаменателем». Автономный, алгоритмический код, разделяет очень хорошо. Сложные платформы, которые управляют потоками, общаются в сети или иным образом взаимодействуют с ОС, сложнее сделать так, чтобы вам не пришлось ломать парадигмы платформы и использовать ЖК-дисплей, который одинаково плохо работает на всех платформах. , В частности, я рекомендую писать свой сетевой код, используя платформы платформы. Это часто требует подхода «сэндвича», когда верхний уровень зависит от платформы, а самый нижний уровень зависит от платформы, а средний - переносной. Это очень хорошая вещь, если тщательно продумано.
Управление потоками и таймеры также должны выполняться с использованием платформ платформы. В частности, Java интенсивно использует потоки, в то время как iOS обычно полагается на свой цикл запуска, чтобы избежать потоков. Когда iOS использует потоки, GCD настоятельно рекомендуется. Опять же, решение здесь состоит в том, чтобы изолировать действительно переносимые алгоритмы и позволить специфичному для платформы коду управлять тем, как он вызывается.
Если у вас есть сложная, существующая структура, которая имеет многопотоковую структуру и имеет много сетевого или пользовательского кода, разбросанного по ней, то совместное использование может быть затруднено, но я все равно рекомендую искать способы ее реорганизации, а не переписать его.
Как разработчик для iOS и Mac, который интенсивно работает с кроссплатформенным кодом, совместно используемым в Linux, Windows и Android, я могу сказать, что Android, безусловно, самая раздражающая из платформ, с которыми можно делиться (Windows использовала для сохранения этого различия, но андроид сдуло). В Android в большинстве случаев было неразумно делиться кодом. Но по-прежнему существует много возможностей для повторного использования кода, и их следует использовать.