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

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
Код конца 2014 года

    CGSize iOSDeviceScreenSize = [[UIScreen mainScreen] bounds].size;
    if (iOSDeviceScreenSize.height == 480)
        isRetina = true;
    else
        isRetina = false;5

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

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

  • Это позор и смерть для народа того, кто писал это
    Ответить
    • Видимо случайно добавил, цифры там конечно нет. Жалко нельзя редактировать.
      Ответить
      • Жаль, я думал, фишки новые. Типа выровнять команду по адресу, кратному 5.
        Ответить
          • я ловил забавные баги в clang/llvm: компилятор просто пропускал некоторые выражения. Причем ловил и в крестах и на objc.
            Так что хотелось бы иметь такую инструкцию 🙂
            Ответить
  • Я вот замечаю, что многие до сих пор не могут(или не хотят) в autolayout, хотя ему уже точно пару лет есть
    Ответить
  • когда-то айфонов было 2 - ретина и неретина. Так что вполне себе нормальный код из старого проекта, который поддерживал только ифоны и не поддерживал смену ориентации
    Ответить
    • >>Так что вполне себе нормальный код

      Для говнокодера - да. Нормальные люди пишут код, который годен больше месяца
      Ответить
      • чел, я не спорю, что это плохохо для 2014 года, но код работает на ВСЕХ ios кроме 8, причем без дополнительных проверок. Напиши вариант лучше. Точнее работал бы, если б автор поста не допустил ошибку.
        Расскажешь почему именно ios 8?
        Ответить
        • Там написана дата написания кода) Конец 2014 - тогда уже были шестые айфоны.

          Кроме того, проверка изначально не верна, height = 480 был равен и на айфоне 3gs, и 3g, которые не имели ретина экранов.

          Также на UIScreen есть проперти scale, в котором будет 2.0 или 3.0, если девайс ретина.

          Ну а помимо всех перечисленных пунктов могу добавить, что этот код я встретил в десятке контроллеров этого легаси проекта.
          Ответить
          • так вот в этом и есть ошибка, причем скорее всего твоя, потому что height = 480 - это неретина, причем работало бы во всех ios и даже на ios 8 при определенных условиях

            Scale? Ок, открываем документацию и читаем когда он появился. А после этого читаем когда появился bounds.

            И дата 2014 кстати ни о чем не говорит. Ты лучше напиши, какую минимальную версию ios должно поддерживать приложение и iphone или ipad тоже?
            Ответить
            • Да что ты говоришь))) height 480 и на айфоне 3gs и на айфоне 4/4c.

              Scale - iOS 4.0. Deployment target проекта - iOS 7. iPhone only.
              Ответить
                • А тут нечего проверять - мы всегда работаем с поинтами а не с пикселями. О чем неоднократно написано в документации.
                  Ответить
                  • да, наверное ты прав. А scale у тебя в ios 8 нормально работает? Не доходили руки проверить
                    Ответить
                    • Честно говоря никогда не юзал - не вижу смысла, когда есть автолейаут. Кроме того, с iOS 7 iPhone не ретина не осталось, так что 1x мы фактически дропнули, и даже не добавляем в ассеты.

                      Если приложение запускается на айпаде мини(единственный не ретина девайс, оставшийся в природе), то 2x ассеты просто даунскейлятся.
                      Ответить
                        • iPad 2 идентичен айпаду мини - разрешение одинаковое. А что с accessibility?
                          Ответить
                              • вместо 5 экранов (или сколько их там) получили на выходе 15 - больше чем устройств? Да не, ничего не произошло
                                Ответить
                                • Я не понимаю, о чем ты говоришь. С автолейаутом мы можем поддерживать все разрешения, и не интересоваться вопросом ретина они или нет. Вопрос намного важнее - это ширина и высота экрана. Сейчас фактически нужно поддерживать 4 размера экрана айфонов, и один размер айпада.

                                  Айфоны - 320 x 480, 320 x 568, 375x667, 414x736
                                  Айпад - 1024 x 768.

                                  Все в пойнтах.
                                  Ответить
                            • По сравнению с зоопарком андроидов - фигня. У вас на iOS их хотя бы конечное число (всего 15?)...
                              Ответить
                              • на андроид просто к этому вопросу умнее подошли (хотя бы для приложений со стандартным UI) - на манер разметки html.
                                А тут - сначала одно разрешение будет всегда, потом вот вам еще одно недоразрешение (ретина, которая улучшает четкость, но не изменяет физически размеры). Вам это слишком просто? А нате вам еще "ретина плюс один сантиметр". Что и этого мало? Нате вам еще ипадов и ифонов.
                                И из-за этой неопределенности имеем over9000 способов выделить нужное разрешение (и поведение в зависимости от него) - начиная с bounds и определения разрешения по модели и заканчивая autolayout и size classes. И все эти способы ущербны. Даже если рассматривать только последние технологии - storyboard и так уже перегружен элементами, а с size classes вообще превращается в ад
                                Ответить
                                • В эппл просто не умеют программировать. У них все продукты - гламурное говно.
                                  Ответить
  • сколько обсирают этот код - а до сих пор не нашли ошибку в посте

    плюсану тому, кто найдет
    Ответить

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

Семь раз отмерь — один отрежь, guest!

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


    8