Из-за static
. Эта переменная не устанавливается на nil
всякий раз, когда выполнение проходит через этот оператор, она устанавливается только при запуске программы.
Это особенность статических переменных продолжительности хранения. Они устанавливаются на их начальное значение при запуске и сохраняют любое значение, которое вы установили после этого. Например, следующий код:
void plugh(void) {
static int xyzzy = 0;
printf (" %d", xyzzy); // or Obj-C equivalent.
xyzzy++;
}
не будет выводить длинную строку нулей, если вы называете это скучным временем. Будет выведено:
0 1 2 3 4 ...
В случае кода Apple это означает, что форматер даты будет создан по требованию и (если вы не установите его обратно на nil
где-то еще) только один раз. Иногда это может быть важно для производительности, если создание объекта - нетривиальная вещь, но даже если нет, то нет смысла постоянно воссоздавать что-то, что вы можете просто использовать повторно.