У меня есть несколько полезных методов для физических расчетов, таких как ускорение/замедление, скорость и некоторые другие.
Большинство из них требуют, по крайней мере, двух измерений по времени. Поэтому каждый раз, когда я хочу их использовать, мне приходится реализовывать в своем объекте кучу переменных экземпляра, которые нуждаются в вычислении, например, для вычисления ускорения.
Например, везде, где мне нужно рассчитать ускорение, я включаю SLPhysics.h и пишу в своем коде:
double acceleration = [SLPhysics + calculateAccelerationForFirstMeasuredSpeed:v1 secondMeasuredSpeed:v2 firstMeasuredTime:t1 secondMeasuredTime:t2];
Это прекрасно работает. Но я бы предпочел способ, который ведет себя как основная анимация, где большая часть деталей для выполнения того, что должно быть сделано, скрыта от пользователя класса.
Итак, чтобы мне не приходилось создавать переменные экземпляра для запоминания последних измеренных значений v1 и t1, я бы предпочел простой в обработке вызов, подобный этому:
double acceleration = [SLPhysics + calculateAccelerationForMeasuredSpeed:v measuredTime:t context:self];
Обратите внимание на параметр контекста. Я думаю, что это путь. Но в настоящее время я понятия не имею, как эти методы класса могут иметь доступ к структуре данных, например, к NSMutableDictionary. Если бы я сделал переменные экземпляра, метод класса не имел бы доступа. Если я сделаю его методом экземпляра, использование будет уродливым и трудным для чтения, а пользователя будет беспокоить управление памятью и другие вещи. Также все это распределение и инициализация могут стоить слишком дорого (я думаю). Я имею в виду... посмотрите на Core Animation. Это так просто! Я хочу то же самое для этого. Но у них тоже была такая проблема, я думаю. Они должны помнить некоторые вещи. Продолжительность анимации, контекст и т. д.
Я думал о записи значений в файл, но это слишком дорого. Я мог бы использовать SQLite. Слишком дорогие операции, наверное. Эти методы можно использовать в местах, где требуется от 5 до 100 вычислений в секунду. Разве нет таких вещей, как «переменные класса»?