¿Dónde está configurado su Delegado de aplicaciones y quién inicializa su ventana y las propiedades de viewController?

Tengo una pregunta muy novedosa sobre las aplicaciones IOS ... Si creo una nueva aplicación basada en vista llamada TestForStackOverflow, Xcode crea automáticamente un código como este para TestForStackOverflowAppDelegate.h:

@class TestForStackOverflowViewController;

@interface TestForStackOverflowAppDelegate : NSObject <UIApplicationDelegate>

@property (nonatomic, retain) IBOutlet UIWindow *window;

@property (nonatomic, retain) IBOutlet TestForStackOverflowViewController *viewController;

@end

y lo siguiente en TestForStackOverflowAppDelegate.m:

#import "TestForStackOverflowAppDelegate.h"

#import "TestForStackOverflowViewController.h"

@implementation TestForStackOverflowAppDelegate

@synthesize window = _window;
@synthesize viewController = _viewController;

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    // Override point for customization after application launch.

    self.window.rootViewController = self.viewController;
    [self.window makeKeyAndVisible];
    return YES;
}

[...]

Aquí vienen mis preguntas:

1) ¿dónde se establece la clase TestForStackOverflowAppDelegate como delegado para la aplicación actual? ¿Se hace "automágicamente"? He visto que el archivo fuente main.m contiene solo el siguiente código:

int main(int argc, char *argv[])
{
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
    int retVal = UIApplicationMain(argc, argv, nil, nil);
    [pool release];
    return retVal;
}

¿No debería establecer la clase delegada de la aplicación en el cuarto parámetro de la invocación de la función UIApplicationMain?

2) ¿dónde se configuran las propiedades window y viewController de la clase TestForStackOverflowAppDelegate?

3) esto puede ser trivial, pero ¿por qué hemos sintetizado window = _window, sin tener una variable de instancia llamada _window en la interfaz TestForStackOverflowAppDelegate? He visto que puede declarar @properties sin tener los iVars correspondientes en las interfaces de clase (tal vez sean creados automáticamente por el compilador), pero ¿es una buena práctica o siempre debe crear los iVars correspondientes en sus clases?

Disculpe por el mensaje muy largo, solo espero no haber escrito una pregunta demasiado obvia ya que aquí en Italia es tarde en la noche y estoy muy cansado ... pero cuando estas preguntas se me ocurren, no puedo esperar para la solución:)

Respuestas a la pregunta(2)

Su respuesta a la pregunta