Взаимодействовавший, используемый в платформе GameKit, всегда уникален для каждого устройства?

Я думаю, что интерфейс алгоритма STL является неоптимальным, и его следует избегать, поскольку непосредственное использование инструментария STL (для алгоритмов) может дать очень небольшой выигрыш в производительности, но определенно будет стоить читабельности. , удобство обслуживания и даже небольшая возможность записи , когда вы изучаете, как использовать инструменты.

Насколько эффективнее стандарт для цикла над вектором:

int weighted_sum = 0;
for (int i = 0; i < a_vector.size(); ++i) {
  weighted_sum += (i + 1) * a_vector[i];  // Just writing something a little nontrivial.
}

, чем использование конструкции for_each или попытка вписать это в вызов накопления?

Вы могли бы утверждают, что итерационный процесс менее эффективен, но для каждого каждый также вводит вызов функции на каждом шаге (который может можно уменьшить, пытаясь встроить функцию, но помните, что «встроенный» является лишь предположением компилятору - он может игнорировать его).

В любом случае разница невелика. По моему опыту, более 90% кода, который вы пишете, не критичны по производительности, но критично по времени кодера . Сохраняя ваш цикл STL буквально встроенным, он очень читабелен. Меньше косвенности, чтобы споткнуться, для себя или будущих сопровождающих. Если это в вашем руководстве по стилю, то вы экономите некоторое время на учебе для своих кодеров (признайте, что обучение правильному использованию STL в первый раз требует нескольких моментов). Это последнее, что я имею в виду под ценой возможности записи.

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

7
задан nico 21 July 2009 в 19:47
поделиться

1 ответ

Просто запустил образец кода GameKit пару раз, и похоже, что peerID создаются случайным образом каждый раз при создании нового сеанса GKS.

Например:

1-й запуск:

remote peerID = 599103133

session.peerID = 1227554288

2-й запуск:

remote peerID = 990301845

сеанс.peerID = 1731464655

Не знаю, как они генерируются, но они хранятся как NSStrings, что для меня немного странно.

9
ответ дан 7 December 2019 в 03:19
поделиться
Другие вопросы по тегам:

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