Создание назад совместимого приложения OS X, когда новый API присутствует?

Если Ваши элементы так или иначе Сопоставимы (то, что порядок имеет любое реальное значение, равнодушно - это просто должно согласовываться с Вашим определением равенства), самое быстрое дублирующееся решение для удаления собирается отсортировать список (0 (n журнал (n))) затем, чтобы сделать, единственная передача и искать повторилась элементы (то есть, равные элементы, которые следуют друг за другом) (это - O (n)).

полная сложность будет O (n журнал (n)), который является примерно тем же как, что Вы получили бы с Набором (n времена, долгие (n)), но с намного меньшей константой. Это вызвано тем, что константа в sort/dedup следует из стоимости сравнения элементов, тогда как стоимость от набора, скорее всего, будет следовать из вычисления хеша плюс одно (возможно несколько) сравнения хеша. Если Вы используете основанную на хеше реализацию Набора, то есть, потому что базирующееся Дерево собирается дать Вам O (n logВІ (n)), который еще хуже.

Насколько я понимаю, однако, Вам не нужно к , удаляют дубликаты, но просто тестируют на их существование. Таким образом, Вы должны ручной код сортировка слиянием или алгоритм пирамидальной сортировки на Вашем массиве, который просто выходит из возвращающего true (т.е. "существует дубликат"), если Ваш компаратор возвращается 0 и иначе завершает вид, и пересеките тестирование сортированного массива на повторения. В сортировке слиянием или пирамидальной сортировке, действительно, когда вид завершается, Вы сравните каждую дублирующуюся пару, если оба элемента уже не были в их конечных положениях (который маловероятен). Таким образом настроенный алгоритм сортировки должен привести к огромному повышению производительности (я должен был бы доказать, что, но я предполагаю, настроенный алгоритм должен быть в O (журнал (n)) на однородно случайных данных)

8
задан tomtaylor 10 September 2009 в 17:35
поделиться

2 ответа

Эту проблему можно решить, изменив настройки сборки целевого объекта:

  1. Установите базовый SDK на 10,6
  2. Установите SDK развертывания на 10,5
4
ответ дан 5 December 2019 в 19:01
поделиться

Трюк с SDK для развертывания работает только в том случае, если у вас одна и та же структура на обеих платформах, но новые вызовы в новой. Для CoreLocation вся структура отсутствует в 10.5, поэтому ваше приложение не сможет загрузиться, поскольку оно не может динамически связываться с платформой.

Вам необходимо сделать вышеупомянутое, а также добавить CoreLocation в качестве слабой структуры. Выберите этап сборки Link Frameworks и Binaries, найдите CoreLocation в подробном представлении и в среднем столбце измените «Required» на «Weak».

Когда вы создаете приложение, Xcode передает -weak_framework CoreLocation компоновщику, и ваше приложение будет загружаться во всех системах 10.5 и 10.6 независимо от наличия CoreLocation. Однако вы должны убедиться, что не вызываете никаких методов CoreLocation, если вы на самом деле не работаете на 10.6.

5
ответ дан 5 December 2019 в 19:01
поделиться