В чем преимущество использования статической 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', не беспокоясь о написании фактической используемой строки.