Я нахожусь в процессе решения проблемы, которая требует от меня сделать следующее в моем 64-битном приложении Какао:
- Создает 32-битный вспомогательный инструмент Какао (инструмент командной строки) из моего приложения. Этот помощник откроет файл (точнее, фильм быстрого времени) и получит доступ к информации об этом файле, используя только 32-битные API (API Quicktime-C)
- Данные, собранные в 32-битном процессе, должны быть переданы обратно в 64-битное приложение.
- 64-битное приложение должно дождаться завершения 32-битного процесса, прежде чем продолжить
Есть много способов сделать это в Какао, но из того, что я понял, это два подхода, которые я мог бы использовать.
Вариант 1: NSTask с трубами
- Использование NSTask для запуска 32-битного процесса
- Перенаправить стандартный вывод NSTasks в канал и считывать данные из этого канала в 64-битном процессе.
- Разбор данных из канала, который будет включать преобразование строк из стандартного вывода в данные (целые числа, числа с плавающей запятой, строки и т. Д.)
Вариант 2: NSTask с NSDistributedNotificationCenter
- Использование NSTask для запуска 32-битного процесса
- Когда данные будут готовы в 32-разрядном процессе, отправьте NSNotification в распределенный центр уведомлений и включите в событие словарь со всеми соответствующими данными.
- В 64-битном приложении подписаться на тот же NSNotification
Итак, мой вопрос к StackOverflowers: какой вариант «лучше»?
Какая практика лучше?
Что является более эффективным?
Я склоняюсь к варианту 2, потому что, похоже, будет задействовано меньше кода. Если эти два подхода не велики, есть ли лучший способ сделать это?