Подтвердить что ты не робот

Как позвонить deinit в Swift

Я написал блок кода следующим образом:

class Person{
        let name:String;
        init(name:String){
         self.name = name;
          println("\(name) is being initialized.");
     }

     deinit{
         println("\(name) is being deInitialized.");

    }
 }

var person:Person?;
person = Person(name:"leo");
person = nil;

При инициализации print в порядке. Когда человек установлен в nil, метод deinit не вызывается.

4b9b3361

Ответ 1

Проблема в том, что игровая площадка - это не настоящая жизнь. Это еще одна причина не использовать их (я думаю, что они являются ужасной ошибкой на Apple часть). Используйте настоящий проект приложения iOS, а deinit вызывается как ожидалось.

Пример из реального проекта:

class ViewController: UIViewController {
    class Person{
        let name:String;
        init(name:String){
            self.name = name;
            println("\(name) is being initialized.");
        }
        deinit{
            println("\(name) is being deInitialized.");

        }
    }
    override func viewDidLoad() {
        super.viewDidLoad()
        var person:Person?;
        person = Person(name:"leo");
        person = nil;
    }
}

Это делает то, что вы ожидаете от этого.