'dealloc' используется, когда объект готов к освобождению (т. Е. Когда счет сохранения объекта становится равным 0). И viewDidUnload вызывается, когда представление выгружается, но оно не может быть немедленно освобождено, так как ссылка на UIViewController все еще сохраняется некоторыми другими объектами.
мое личное предпочтение заключается в том, что для объектов, созданных с помощью init, они освобождаются с помощью dealloc, для объектов, создаваемых с помощью viewDidLoad, они освобождаются с помощью viewDidUnload.