Одна кодовая база для Snow Leopard и Leopard - PullRequest
6 голосов
/ 22 октября 2009

Фон

Я разработчик, который разрабатывает приложение для Mac. Я собираюсь взять в свои руки снежного барса. До сих пор я строил на Леопарде. Я занимался разработкой Какао около года не очень интенсивно.

Я много читал о Snow Leopard и Grand Central Dispatch в частности. Я знаю, что он использует блоки, но я не разбираюсь в том, как работают блоки или как работает Grand Central Dispatch.

Мой вопрос

Как мне лучше всего разработать одну кодовую базу для Snow Leopard и Leopard, максимально используя при этом новые возможности многопоточности в Snow Leopard?

NSOperationQueue

Мой инстинкт состоит не в том, чтобы иметь дело с GCD непосредственно в моем коде, а когда что-то требует помещения в очередь, используйте NSOperationQueue, поскольку я прочитал из сессий Mike Ashes Q & A, что в Snow Leopard NSOperationQueue полностью использует GCD и ошибка, обнаруженная им в «Леопарде», теперь исправлена.

Ручное управление потоками

Тем не менее, когда речь идет об управлении конкретными фоновыми потоками, есть ли способ воспользоваться преимуществами более простых в использовании средств управления потоками в Snow Leopard, не нарушая их в Leopard? Или люди порекомендовали бы, чтобы у меня были разные цели для каждой ОС с несколькими разными классами в каждой? Мне кажется, это просто кошмар обслуживания, ожидающий, чтобы это произошло.

Или, может быть, мне стоит просто не оптимизировать свое приложение для Snow Leopard и придерживаться +(void)detachNewThreadSelector:toTarget:withObject: или чего-то подобного.

Что думают люди?

Ответы [ 2 ]

9 голосов
/ 22 октября 2009

Ваше внутреннее впечатление на GCD правильное. Фактически, любой API, использующий блоки, отсутствует, если только вы не обусловите этот код для запуска только на Snow Leopard. Это имеет смысл, если код предназначен для поддержки функций, которые доступны только в Snow Leopard, но если это функция, которую вы также собираетесь поддерживать в Leopard, вы можете также просто использовать путь к коду Leopard во всех случаях, добавив специфичный для Snow Leopard Путь, который не дает видимых улучшений пользователю, просто усложнит ваш код и увеличит ваши затраты на тестирование.

Это особенно касается таких вещей, как управление потоками или GCD. Изменения требуют значительных изменений в архитектуре, это не просто:

if (snowLeopard) {
  [NSSnazySnowLeopardClass doSomething];
} else {
  [NSBoringLeopardClass doSomethingEquivalent];
}

В общем, если изменения настолько просты, Apple обрабатывает их внутри класса без изменения API. Другими словами, вопрос не в том, можете ли вы использовать более простой код управления потоками в Snow Leopard, а в том, почему вы должны в любом случае сделать сложную версию для Leopard. Дополнительный путь к коду - это дополнительный путь к коду, и пока вы не можете отказаться от поддержки Leopard, используя значительно отличающиеся API-интерфейсы в Snow Leopard (даже если их проще использовать, чем у Leopard), это просто дополнительная работа.

Я бы подумал, действительно ли ты хочешь нацелиться на Леопарда. Внедрение Snow Leopard было справедливым, Snow Leopard - это дешевое обновление, и из-за изменений в API будет большое давление на пользователей со стороны небольших разработчиков, использующих только приложения Snow Leopard. Единственная группа пользователей, которая собирается оставаться на Leopard в течение длительного времени, это те, кто не технически подкован (кто вряд ли установит много стороннего программного обеспечения), и те, кто все еще использует PPC Mac (кто еще не купил новый Mac). через 3 года, поэтому, вероятно, не покупают много программного обеспечения). Если это приложение, которое, как вы думаете, будет выпущено через 3-9 месяцев, я бы сказал, что использование Snow Leopard - это, вероятно, разумный вариант, который значительно сократит ваши затраты на разработку и тестирование.

2 голосов
/ 22 октября 2009

Одним из способов было бы понять, какие API в Leopard были изменены в Snow Leopard для использования GCD. Например, NSOperation и NSOperationQueue в Leopard работают как всегда. Однако в Snow Leopard они были переписаны, чтобы использовать преимущества GCD. Вуаля. Мгновенное обновление для ваших 10,6 пользователей.

Другой вариант - использовать что-то вроде PLBlocks и самостоятельно скомпилировать GCD в ваш код. Я понятия не имею, сработает ли это, но это может стоить того. =)

...