Оба определяют классы, но классы используются для разных вещей. ViewController.h / m определяет класс контроллера представления, который управляет иерархией представлений - в основном, одним экраном приложения. У вас может быть несколько экранов, каждый из которых имеет свой собственный контроллер вида.
AppDelegate.h / m определяет класс, который управляет приложением в целом. Приложение создаст один экземпляр этого класса и отправит сообщения этого объекта, которые позволяют делегату влиять на поведение приложения в четко определенные моменты времени. Например, -application: didFinishLaunchingWithOptions: отправляется, когда приложение завершает запуск, и готово сделать что-то интересное. Посмотрите на справочную страницу UIApplicationDelegate список сообщений, которые делегат приложения может реализовать для изменения поведения приложения.