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

    −109

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    - (void)countDown
    {
        NSDate *currentDate = [NSDate date];
        NSTimeInterval timeInterval = ([currentDate timeIntervalSinceDate:startDate]);
        NSDate *timerDate = [NSDate dateWithTimeIntervalSince1970:timeInterval];
        NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
        [dateFormatter setDateFormat:@"ss"];
        [dateFormatter setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0.0]];
        NSString *timeString=[dateFormatter stringFromDate:timerDate];
        
        if ([timeString isEqualToString:@"02"])
        {
            [logoTimer invalidate];
            logoTimer = nil;
            // some other code
        }
    }
    
    - (void)updateCounter
    {
        startDate = [NSDate dateWithTimeIntervalSinceNow:00];
        logoTimer = [NSTimer scheduledTimerWithTimeInterval:0.1
                                                     target:self
                                                   selector:@selector(countDown)
                                                   userInfo:nil
                                                    repeats:YES];
    }

    Вот так незатейливо можно поставить задержку на 2 секунды

    Запостил: tyler, 19 Января 2013

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

    • NextStep головного мозга. Кстати, вопрос в знающим, как правильно то?
      У нас в gamedeve популярно CACurrentMediaTime.
      Ответить
      • Эй, тут у нас и так много геймдеверов
        Иди на свой gamedev.ru
        Ответить
      • Да тут говно на говне, блин.
        Фризить основной поток нельзя (во-первых - плохой стиль, во-вторых - 5 секунд висящаябез реакции программа убивается операционкой). Так что таки, да, таймер. Но он тут через ТАКУЮ жопу используется....
        Инициализация - через жопу. Использование = через жопу. Проверка остановки - через жопу. Хоть остановили его нормально, вроде. Хотя не исключено, что чего-то мы не знаем.
        Ответить
        • Что самое печальное, так пишут спустя полгода активной разработки под iOS, причем имея какой-то багаж знаний и опыта до того.
          Ответить
          • Знаем, знаем. Только у нас не пол года, а три.
            Ответить
            • А знаний средств выразительности - на уровне месяца. Статический класс с данными, массивы и словари неструктурированной хрени и глобальные уведомления.
              Ответить
              • > Статический класс с данными, массивы и словари неструктурированной хрени и глобальные уведомления.
                Боюсь, что если бы он вышел за пределы этих трех инструментов, вам разбираться в его коде было бы на порядок сложнее.

                Безграмотный структурный код читать еще можно, а вот безграмотный код человека с ооп и паттернами головного мозга - очень напряжно.

                P.S. А вообще - ему прямая дорога в динамически типизированные языки типа javascript.
                Ответить
                • Ну да, он некоторые замечания по работе UI пытался выполнять очень странным способом: performSelectorInBackground: - и уже в переданном селекторе подёргать вьюху.
                  Ответить
                  • И как UI иоса реагировал на подергивание его из фонового треда? ;) У андроида сразу исключение вылетает при этом, попадал на это пару раз по тупости.
                    Ответить
                    • Как бы должно упасть приложение. По крайней мере, при использовании GCD падает.
                      Ответить
                    • Race condition возникал. Если больше ничего UI не дёргало - программа жила и работала. А если дёргало... Последствия были самыми внезапными.
                      Ответить
                      • > Последствия были самыми внезапными.
                        Да уж, андроид в этом плане оказался более продуманным. Исключение выдается при первом же обращении к UI из не UI потока.
                        Ответить
                        • Насколько помню, исключение выдаётся при попытке дёрнуть методы вьюхи не из треда, её создавшем.
                          В библиотеке проверки лицензии почему-то коллбэки могут приходить в побочном треде. А я про это не знал. И показывал диалоги прямо из коллбэков проверки лицензии. При нажатии на Retry приложение крэшилось, потому что простановка текста на диалога происходила в другом треде.
                          Ответить
                        • >Исключение выдается при первом же обращении к UI из не UI потока.
                          дотнет такой же подход исповедует
                          Ответить
    • А, кстати! Условие может не сработать с довольно высокой вероятностью.
      Ответить
      • А ведь срабатывало)) Подвох заметили только при code review
        Ответить
        • Вы поведайте автору, что таймер может срабатывать с большей (существенно большей) задержкой, чем указанно. Может что переосмыслит :)
          Ответить
        • У вас code review есть, счастливые люди... Хочу к вам )
          Ответить
          • У нас сейчас тоже ревью кода введено. И такая редкая плюшка, как обучение новичков. Скоро будут внедрять юнит-тестирование.
            Ответить
    • > dateWithTimeIntervalSinceNow
      > scheduledTimerWithTimeInterval
      я думал такие длинные имена только в тестах, построенных по bdd, встречаются. Это к вопросу о наименованиях... Ну невозможно же читать.
      date_with_time_interval_since_now чуть лучше, но почему бы просто не давать имена покороче?...
      Ответить
      • Дело привычки.
        А спагетти-код? Не, не слышал :)
        Ответить
      • >date_with_time_interval_since_now
        0?
        Ответить
      • Вообще, Objective-C - не быстрый (в плане написания кода) язык. На C# те же конструкции я пишу в среднем на треть быстрее.
        Ответить
        • Даёт время подумать)

          А вообще, XCode довольно неплохо ускоряет написание, на мой личный взгляд гораздо лучше VS.
          Ответить
          • Имхо, только потому, что запас для ускорения значительно выше :D
            Хотя всё равно, приходится переодически лезть в хеадеры SDK и выдёргивать имена, потому что если ты забыл, как пишется "should" или вообще, с чего же там эта хрень начинается - автозавершение не поможет )
            Ответить
            • Кстати да, я вот, например, минимум раз в неделю забываю, как правильно пишется метод postNotificationName у NSNotificationCenter. Я пытаюсь написать и push, и write, и send. Редко когда вспоминаю, обычно лезу в класс, где оно есть.
              Ответить
              • У нас с NSNotification, NSNotificationCenter связан целый мем.

                Из-за него у меня крайне подозрительное отношение к использованию этих классов.
                Ответить
                • Ты скажи спасибо, что с key/value observing не общался. Там код получатся прям как у нашего "любимого" аффтора, и никуда от этого не уйти. Как не извращайся - всё равно через жопу выйдет, просто в разных позах.
                  Ответить

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