Подготовься к IT-собеседованию на английском

Нужно ли писать weak self в Grand Central Dispatch?

Тут у нас возник спор: нужно ли писать [weak self] в GCD?

Один говорит:

– [weak self] нужно писать везде!

Второй говорит:

– Нет, даже если не писать [weak self] внутри DispatchQueue, утечки памяти не будет.

Вместо того,чтобы разбираться, легче написать пару строк. Тяжелее об этом написать пост.

Итак, мы создадим UIViewController, в котором будет вызываться метод в DispatchQueue через пять секунд после viewDidLoad.

class SecondViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        print("viewDidLoad")
        
        DispatchQueue.main.asyncAfter(deadline: .now()+5, execute: { [weak self] in
            self?.method()
        })
    }
    
    func method() {
        print("method")
    }
    
    deinit {
        print("deinit")
    }
    
}

Этот ViewController будет пушиться с другого ViewController-а. А сама суть в том, что за эти пять секунд, до вызова нашего метода, мы должны удалить этот ViewController со стэка UINavigationController. То

Откройте полный доступ

Войдите в аккаунт, чтобы продолжить. Если у вас есть подписка, доступ откроется автоматически.