Субъективный Си / Говнокод #18013 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
#pragma mark - class methods
+ (CGFloat)cellHeightForCategory:(PostCategory *)category subscribed:(BOOL)subscribed
{
    static CategoryTableViewCell *cell = nil;
    if(!cell) {
        cell = [[[UINib nibWithNibName:NSStringFromClass([self class]) bundle:[NSBundle mainBundle]] instantiateWithOwner:nil options:nil] firstObject];
    }
    [cell setupCellForCategory:category subscribed:subscribed];
    [cell layoutIfNeeded];
    return [cell.contentView systemLayoutSizeFittingSize:UILayoutFittingExpandedSize].height;
}

Задаёмся мы тут вопросом, почему это таблица загрузке данных зависает на 5 секунд...

Запостил: krypt krypt, (Updated )

Комментарии (9) RSS

  • Так, был не прав. nibWithNibName вызывается однажды.
    Но статик внутри функции - определённо новое слово в говнокоде.
    Ответить
    • Чем это локальный static плох? Он же не виден там, где его видно быть не должно и это отлично.
      Ответить
      • Чем плох? - многопоточность. Например, if (!cell) перевел выполнение вовнутрь блока и отдал управление другому потоку, который вызвал эту же функцию, и тоже перешел в этот блок. После того, как второй поток отдал управление первому, первый все еще находится внутри блока, предполагая, что cell = hil, но на самом деле это уже не так и в зависимости от того, что эта длинная строчка делает / есть ли у нее побочные эффекты может получиться лажа.
        Ответить
        • Этот метод по-любому вызывается только из UI треда. А если нет - у него гораздо большие проблемы с многопоточностью, чем этот несчастный статик.
          Ответить
          • Теоретически, это можно сделать из фонового потока, пока элемент не присоединён к дереву визуальных элементов.
            В любом случае, я static внутри метода вообще впервые за 6 лет работы увидел. Вот этим он в первую очередь и плох.
            Ответить
          • Ну я говорил вобщем про статики без синхронизации. Я не знаю Обжекитв-С на столько, чтобы сказать можно ли это вызывать только из определенного места.

            Другой момент: в методе класса объявлять статические переменные... это прямо такой ООП что совсем не ООП. Ладно еще это просто функция была, а так, по крайней мере в теории, ожидается, что метод будет работать с классом к которому он принадлежит. Но это опять же общая проблема всего статического. У меня есть устойчивое впечатление, что модификатор "статик" был специально придуман для людей которым было тяжело переучиться с процедурного стиля на ООП, в смысле "поблажка" позволяющая быстро наговнокодить привычным способом вместо того, чтобы разобраться с проблемой и решить ее лучшим способом.
            Ответить
            • Ну да. Единственный плюс статика по сравнению с глобалками - немного легче найти все места, где его юзают (если он, конечно, не public). В остальном - самая обычная глобалка со всеми её проблемами.
              Ответить

Добавить комментарий

Помни, guest, за тобой могут следить!

    А не использовать ли нам bbcode?


    8