В чем преимущество использования статической NSString для CellIdentifier?
Я всегда вижу шаблон для UITableViewController
declare
static NSString *CellIdentifier
в
- (UITableViewCell *)tableView:(UITableView *)tableView
cellForRowAtIndexPath:(NSIndexPath *)indexPath
Почему статический? Я изменил это во многих местах, потому что мой CellIdentifier
изменяется в зависимости от раздела? В чем причина того, что это статично? Я влияю на производительность?
Ответы
Ответ 1
cellForRowAtIndexPath:
получает много имен. Каждый раз, когда у вас есть метод, который вызывается снова и снова за короткий промежуток времени, вы хотите свести к минимуму количество объектов, ожидающих автоматического выхода, поскольку эти объекты будут сохранены в стеке до тех пор, пока, как минимум, следующий цикл цикла. Использование статической строки гарантирует, что строковый объект создается только один раз, а не каждый раз, когда вызывается метод.
Это не обязательно, но если у вас ограниченный объем памяти, как на мобильных устройствах, вы можете оптимизировать количество объектов, созданных за короткий промежуток времени, где это возможно.
Ответ 2
Когда объявлена переменная static
, в программе есть только один экземпляр этой переменной. Поскольку это постоянное значение, которое назначается только один раз, этот подход позволяет избежать резервирования и назначения для него переменной стека. Разумеется, эта переменная стека почти наверняка оптимизирована компилятором, а константа строки уже оптимизирована в статическом хранилище компилятором. Так что это довольно небольшая оптимизация, которая представляет собой как бы намек на то, что означает средство разработчика (т.е. Все экземпляры имеют одинаковое значение), как и все остальное.
Ответ 3
Пока я согласен с @Answerbot относительно аспекта производительности статических строк, также стоит отметить, что статические строки менее подвержены ошибкам. IDE будет автозаполнять статический объект NSString, гарантируя, что строка будет названа последовательно.
EDIT:
Если вы используете следующий код:
static NSString *cellIndentifier = @"myCellIdentifier";
вы можете свободно использовать переменную 'cellIdentifier', не беспокоясь о написании фактической используемой строки.