Pull to refresh
5
0
Сергей Турсунов @fiveze

iOS Developer

Send message
Если полагаться на количество открытых тикетов, то надо бы упомянуть и про закрытые — их 13656.
Не могли бы вы объяснить, как в этом случае происходит кастинг Keys.key во ViewType? Или это просто заглушка для Keys.key, а type задается уже в целевом контроллере?

Скрытый текст
extension UIViewController {
    
    enum ViewType {
        case undefined
        case navigation
        case transport
        ...
    }
    
    private struct Keys {
        static var key = "\(#file)+\(#line)"
    }
    
    var type: ViewType {
        get {
            return objc_getAssociatedObject(self, &Keys.key) as? ViewType ?? .undefined
        }
        set {
            objc_setAssociatedObject(self, &Keys.key, newValue, .OBJC_ASSOCIATION_RETAIN_NONATOMIC)
        }
    }
}

И да, deadlock еще может быть в таком случае:

let queue = DispatchQueue(label: "com.tursunov.app.exampleQueue")

queue.sync {
    
    print(Thread.isMainThread) // true
  
    DispatchQueue.main.sync { // deadlock
        // ...
    }
}


Ну и стоит учесть, что все примеры из главной очереди запускаются.
НИКОГДА НЕ вызывайте метод sync на main queue, потому что это приведет к взаимной блокировке (deadlock) вашего приложения!

Не совсем понял, про какой случай речь? Нельзя вообще вызывать конструкцию DispatchQueue.main.sync?
Если же речь идет о вызове DispatchQueue.main.sync в Main Thread, то это относится ко всем задачам, выполняемым в одной и той же очереди (Dispatch Queues and Thread Safety):
Do not call the dispatch_sync function from a task that is executing on the same queue that you pass to your function call. Doing so will deadlock the queue. If you need to dispatch to the current queue, do so asynchronously using the dispatch_async function.

То есть следующий код вызовет deadlock:
let queue = DispatchQueue(label: "com.tursunov.app.exampleQueue")

queue.async {
    // ...
    queue.sync { // deadlock
        // ...
    }
}


При этом следующий кусок кода имеет право на достойное выполнение. Или я ошибаюсь?

let queue = DispatchQueue(label: "com.tursunov.app.exampleQueue")

queue.async {
    // ...
    DispatchQueue.main.sync { // there's no deadlock
        // ...
    }
    // ...
}



За статью огромное спасибо, must have. Теперь жду про Operation :)
Не смотрели AppMetrica от Яндекса?
Спасибо за гайд. Есть что поделать с новыми пушами теперь.
Думается, никто и не тратил большую часть средств на разработку, приложение действительно простое. А вот на маркетинг, освоение рынка (первичная заниженная стоимость), выплаты таксистам (средний ценник по рынку) — уже да.
Красивая реализация. Спасибо!
С кейсами для enum как-то неоднозначно.
4 цифры используются по-умолчанию, но есть возможность изменить тип пароля (буквы + цифры или произвольное количество цифр).
А что на выходе получилось (визуально)? Со скриншотами приложения статья бы стала еще интереснее.
    private var _jokeKey: String!

    var jokeKey: String {
        return _jokeKey
    }

А как насчет такой конструкции (вместо той, что выше)?

private(set) var jokeKey: String!
Это делает guard естественным способом проверки нефатальных предварительных условий без использования «пирамиды сметри»

А что за «пирамиды сметри»? Ничего не нагуглил по этому термину.
Почти все методы навигации в данном случае начинаются с приставок push/pop, что-то вроде протолкнуть/вытолкнуть (не как в Git-e антонимы push/pull)

UINavigationController при работе с контроллерами представляет собой стек, отсюда и приставки push/pop.

Спасибо, статья хорошая.
В iOS вполне юзабельно, выбор через пикер обходится в пару-тройку свайпов (скроллов), — что по расходам сопоставимо с вводом значений напрямую. Тут реализация похожая, также со свайпами.
Пользуюсь iOS-Slide-Menu.
Достаточно указать левый/правый вид меню и слайдер готов.
Прошу прощения, а уроки из iOS школы будут выкладываться?
На Quora есть неплохой пост, содержащий блоги для iOS-разработчиков.
Интересный вопрос хочется задать всем тем, кто яро защищает университеты и текущий строй образования. Все подобные холиварщики похожи на то, как истукан-дембель возвращается из армии, объявляя, что годы прошли не зря.
В информационную эпоху университеты являются рудиментом, КПД слишком мал. Будучи студентом технического университета я не получаю знаний, под школьным впечатлением я ожидал большего от высшего образования.

Так чему же учат в университетах? Жизни-ловкости-гибкости, то есть всему, кроме знаний?
1

Information

Rating
Does not participate
Location
Санкт-Петербург, Санкт-Петербург и область, Россия
Date of birth
Registered
Activity