Ответ
Allocations (часто ошибочно называют "Locations") и Time Profiler — это инструменты в Instruments для анализа разных аспектов производительности.
| Инструмент | Что измеряет? | Для чего используется? |
|---|---|---|
| Allocations | Выделение и освобождение памяти (объекты heap). |
Поиск утечек памяти, анализ жизненного цикла объектов, оптимизация использования памяти. Показывает, что и где создается в памяти. |
| Time Profiler | Время выполнения кода (загрузка CPU). | Поиск «узких мест» (bottlenecks), оптимизация медленных функций или методов. Показывает, где приложение тратит процессорное время. |
Пример проблемы для Allocations:
func loadImages() {
for i in 0..<1000 {
// Каждая итерация создает новый UIImage, увеличивая память.
// Allocations покажет массовые аллокации в этой строке.
let _ = UIImage(named: "image_(i)") // Образец: утечка, если изображения кэшируются неправильно.
}
}
- Allocations покажет тысячи вызовов
UIImage.init, что может указывать на отсутствие кэширования.
Пример проблемы для Time Profiler:
func processData() {
// Медленный синхронный вызов на главном потоке.
let data = expensiveSyncNetworkRequest() // ❌ Блокирует UI
let result = performComplexCalculation(data) // ❌ Тяжелые вычисления на главном потоке
updateUI(with: result)
}
- Time Profiler выделит функции
expensiveSyncNetworkRequestиperformComplexCalculationкак наиболее затратные по CPU, указав на необходимость вынесения их в фоновый поток.
Совместное использование: Часто проблема проявляется в обоих инструментах. Например, неэффективный алгоритм (виден в Time Profiler) может создавать много промежуточных объектов (виден в Allocations).
Практическое правило:
- Используйте Time Profiler, когда интерфейс «подтормаживает» или вентилятор ноутбука сильно шумит.
- Используйте Allocations (и Leaks), когда приложение получает предупреждения о памяти или неожиданно завершается.