Как работает UITableView dequeueReusableCell?

Консенсус заключается в использовании словаря для этого - см. другие ответы. Это хорошая идея для большинства случаев, однако есть много аспектов, связанных с этим:

  • вы сами будете нести ответственность за этот словарь, включая сбор мусора (из переменных in-dict) и т. Д. .
  • нет никакой локальности или глобальности для переменных переменных, это зависит от глобальности словаря
  • , если вы хотите переименовать имя переменной, вам придется сделать это вручную
  • однако вы гораздо более гибкие, например вы можете решить перезаписать существующие переменные или ... ... выбрать реализацию константных переменных для создания исключения при перезаписи для разных типов и т. д.

Тем не менее, я реализовал variable variables manager -класс, который предоставляет некоторые из вышеперечисленных идей. Он работает для python 2 и 3.

Вы использовали бы класс следующим образом:

from variableVariablesManager import VariableVariablesManager

myVars = VariableVariablesManager()
myVars['test'] = 25
print(myVars['test'])

# define a const variable
myVars.defineConstVariable('myconst', 13)
try:
    myVars['myconst'] = 14 # <- this raises an error, since 'myconst' must not be changed
    print("not allowed")
except AttributeError as e:
    pass

# rename a variable
myVars.renameVariable('myconst', 'myconstOther')

# preserve locality
def testLocalVar():
    myVars = VariableVariablesManager()
    myVars['test'] = 13
    print("inside function myVars['test']:", myVars['test'])
testLocalVar()
print("outside function myVars['test']:", myVars['test'])

# define a global variable
myVars.defineGlobalVariable('globalVar', 12)
def testGlobalVar():
    myVars = VariableVariablesManager()
    print("inside function myVars['globalVar']:", myVars['globalVar'])
    myVars['globalVar'] = 13
    print("inside function myVars['globalVar'] (having been changed):", myVars['globalVar'])
testGlobalVar()
print("outside function myVars['globalVar']:", myVars['globalVar'])

Если вы хотите разрешить переписывание переменных с помощью только тот же тип:

myVars = VariableVariablesManager(enforceSameTypeOnOverride = True)
myVars['test'] = 25
myVars['test'] = "Cat" # <- raises Exception (different type on overwriting)

-1
задан kenryuakuma 24 March 2019 в 01:50
поделиться

1 ответ

как работает UITableView? Создает ли он новые ячейки при первом запуске приложения?

Да! Вот идея. Допустим, ваше табличное представление имеет 2000 строк. Но только 12 ячеек видны одновременно на экране. Итак, нужно создать только 12 ячеек (или, может быть, 13 или 14) за все время существования приложения!

И я действительно хочу знать, как и когда вызывается метод dequeueReusableCell [113 ]

Вы называете это в начале tableView(_:cellForRowAt:). Этот метод, в свою очередь, вызывается средой выполнения всякий раз, когда требуется ячейка, и вы получаете либо новую ячейку (начальные 12, 13 или 14 в моем примере выше), либо повторно используемую ячейку (все строки будут отображаться после этого), и вы возвращаете это для показа, и поэтому все в порядке с миром.

0
ответ дан matt 24 March 2019 в 01:50
поделиться
Другие вопросы по тегам:

Похожие вопросы: