Когда использовать CALayer на Mac/iPhone?

Я предпочитаю создавать данные тестирования с помощью вызовов API.

В начале теста, Вы создаете пустую базу данных (в оперативной памяти или то же, которое используется в производстве), запустите скрипт установки, чтобы инициализировать его и затем создать безотносительно данных тестирования, используемых базой данных. Создание данных тестирования может быть организовано, например, с Объектный Родительский элемент шаблон, так, чтобы те же данные могли быть снова использованы во многих тестах, возможно с незначительными изменениями.

Вы хотите иметь базу данных в известном состоянии перед каждым тестом, чтобы иметь восстанавливаемые тесты без побочных эффектов. Таким образом, когда тест заканчивается, необходимо отбросить тестовую базу данных или откатывать транзакцию, так, чтобы следующий тест мог всегда воссоздавать данные тестирования тот же путь, независимо от того, передали ли предыдущие тесты или перестали работать.

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

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

Другая вещь, связанная с интеграционным тестированием база данных, тестирует то обновление из предыдущей схемы базы данных, работает правильно. Для этого Вы могли бы хотеть считать книжные Базы данных Рефакторинга: Эволюционное Проектирование баз данных или эта статья: http://martinfowler.com/articles/evodb.html

22
задан randombits 19 September 2009 в 02:56
поделиться

2 ответа

В моих тестах UIView и CALayer обеспечивают примерно одинаковый уровень производительности на iPhone. Как упоминает rpetrich в своем комментарии, UIViews - это тонкая оболочка вокруг CALayers. На Mac CALayers намного легче, чем NSViews.

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

Еще одна проблема - кроссплатформенный код (Mac / iPhone). Мое приложение для iPhone использует полностью-CALayer-интерфейс для своего основного представления в значительной степени потому, что я могу использовать тот же самый код для рисования этого интерфейса в его аналоге для Mac. Другой пример этого: Я рекомендую вам Core Plot framework , который рисует графики полностью с использованием CALayers и работает как на Mac, так и на iPhone. CALayers в значительной степени одинаковы на обеих платформах, где UIView и NSView имеют очень разные интерфейсы.

36
ответ дан 29 November 2019 в 04:47
поделиться

Если вы можете делать то, что хотите, с «неявной анимацией» (предлагаемой UIKit / AppKit без необходимости копаться в CA, слоях и аниматорах), тогда обязательно идите по этому пути.

CoreAnimation вступает в игру, когда вы начинаете использовать более сложные анимации, такие как нелинейное движение или повторяющиеся эффекты, а также некоторые синхронизированные эффекты. Вы можете МНОГОЕ с ним сделать, но это довольно тяжелый инструмент (с соразмерной кривой обучения, по крайней мере, по сравнению с материалом UIKit).

4
ответ дан 29 November 2019 в 04:47
поделиться