В приложении, которое имеет много различных UITableView, я часто использую временные массивы для импорта данных, используемых для заполнения табличного представления, определения количества строк, разделов, верхних и нижних колонтитулов и т. Д. Мне интересно, потому что эти массивы нужно создавать для каждой ячейки таблицы снова и снова, если объявление статики, чтобы их не нужно было создавать заново, будет способствовать повышению производительности, потому что сейчас эти массивы создаются в cellForRowAtIndexPath:
, numberOfRowsInSections:
, numberOfSectionsInTableView: ,
footerForSection: `. Может ли объявление о том, что такое большое количество статических массивов (которые могут содержать приличное количество информации, скажем, пару тысяч удвоений и пару сотен строк), в конечном счете, поможет мне или навредит мне? Я знаю, что статический массив остается в памяти на протяжении всей жизни приложения, поэтому будет ли это много статических массивов вредным? Предполагая, что этот процесс происходит в 4-5 контроллерах представления по всему приложению, мы говорим о 15-20 копиях этого массива, которые просто сидят без дела. Какой мой лучший вариант здесь? Спасибо
Edit: я использую синглтон, который содержит значения. Настоящая причина для временных массивов состоит в том, чтобы сохранить код в чистоте. Я могу сделать что-то вроде
dataArray = [[SingletonDataController sharedSingleton] dataArray]
objectAtIndex:CURRENTLY_SELECTED_DATA_INDEX;
тогда
* * 1010
вместо того, чтобы сгруппировать все в одно нечитаемое утверждение, например:
myTitleString = [[[[SingletonDataController sharedSingleton] dataArray]
objectAtIndex:CURRENTLY_SELECTED_INDEX] objectAtIndex:keyTitleStringIndexKey];
Я провел несколько собственных тестов, сравнивая время, необходимое для создания табличного представления с / без статической инициализации. Вот результаты:
2012-01-29 18:31:57.539 XXXXXXX[711:707] static average: 0.058798
2012-01-29 18:31:57.543 XXXXXXX[711:707] nonstatic average: 0.058395
Как видите, статическая инициализация на самом деле медленнее , чем нестатическая, но всего на несколько десятитысячных долей секунды. Вероятно, это просто результат неточных измерений, но результаты говорят достаточно, чтобы убедить меня, что разница достаточно мала, чтобы ее отклонить. Тайна раскрыта.