1. Objective C / Говнокод #16450

    −405

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    CGFloat ageInYears = self.user.age;
                 
    if (ageInYears < 1) {
        CGFloat ageInSeconds = [[NSDate date] timeIntervalSinceDate:self.user.birthday];
        ageInYears = floorf(ageInSeconds / (365.25 * 24.0 * 60.0 * 60.0));
    }
    
    // ...
    
    profileInfoCell.schoolLabel.text = [NSString stringWithFormat:@"%.0f", ageInYears];

    нет слов

    Запостил: realsugar, 30 Июля 2014

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

    • >>> 365.25
      Аптимизацыя?
      Ответить
    • Жалко, что секунды не в инт пихаются, а то с некоторого возраста начиналось бы омоложение
      Ответить
    • другое интересно - переменной ageInSeconds (возраст) присваивается дата рождения (дата).
      Ответить
      • Сфига? Там же интервалОтДаты датаРождения.
        Ответить
    • >CGFloat
      Ответить
      • А чем оно отличается от просто флоата?
        Ответить
        • Он от эпл, значит на 20 % круче
          Ответить
        • CGBase.h:

          typedef float CGFloat; // 32-bit
          typedef double CGFloat; // 64-bit

          >These types were introduced to make it easier to write code that works on both 32-bit and 64-bit without modification.
          Ответить
          • Хм, а как разрядность флоатов зависит от разрядности проца?
            Ответить
            • Никак.

              >Floating point quantities in the Core Graphics framework (Quartz), which are float on 32-bit architectures, are being expanded to double to provide a wider range and accuracy for graphical quantities. Core Graphics declares a new type for floating-point quantities, CGFloat, and declares it conditionally for both 32-bit and 64-bit. This change affects Cocoa because of its close dependency on Core Graphics. Where a parameter or return value in the Cocoa frameworks is a graphical quantity, CGFloat now replaces float
              Ответить
              • зачем в задачах графики двойная точность "по умолчанию"?
                Ответить
                • У ретины разрешение вдвое больше - значит надо двойную точность.
                  Ответить
                • Я не знаю, как принципиально построено хранение размеров и трансформаций в Кокое, но, например, во Флаше это записывается в матрицу трансформаций, где значения [0, 1] представляют и увеличение и поворот. Даже с 64-битными флоатами этого хватает для точности в примерно полградуса (для поворотов), а учитывая то, что там еще и операции с довольно большой потерей точности нужны для переводов из понятных пользователю "ширина" и "высота" в конкретные значения, использующиеся для отрисовки - все становится совсем плохо.

                  Например, это известная жизненная мудрость, что для того, чтобы отрендерить красиво анимацию изменения ширины прямоугольника, лучше самому рассчитать изменения ширины и отрисовать его вместо того, чтобы использовать примитивы прямоугольника и изменять им ширину. Во втором случае изменения будут скачками разной высоты.
                  Ответить
    • > ...schoolLabel...

      Школоло что ли?
      Ответить

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