У меня вопрос о новинках о приложениях IOS... Если я создаю новое приложение на основе вида, называемое TestForStackOverflow, Xcode автоматически создает такой код для TestForStackOverflowAppDelegate.h:
@class TestForStackOverflowViewController;
@interface TestForStackOverflowAppDelegate : NSObject <UIApplicationDelegate>
@property (nonatomic, retain) IBOutlet UIWindow *window;
@property (nonatomic, retain) IBOutlet TestForStackOverflowViewController *viewController;
@end
и в 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;
}
[...]
Вот мои вопросы:
1), где класс TestForStackOverflowAppDelegate установлен как делегат для текущего приложения? Это сделано "автоматически"? Я видел, что основной файл main.m содержит только следующий код:
int main(int argc, char *argv[])
{
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
int retVal = UIApplicationMain(argc, argv, nil, nil);
[pool release];
return retVal;
}
Должен ли он задавать класс делегата приложения в четвертом параметре вызова функции UIApplicationMain?
2), где заданы свойства window и viewController для класса TestForStackOverflowAppDelegate?
3) это может быть тривиально, но почему мы синтезируем window = _window, не имея переменной экземпляра, называемой _window в интерфейсе TestForStackOverflowAppDelegate? Я видел, что вы можете объявлять @properties, не имея соответствующих iVars в интерфейсах классов (возможно, они автоматически создаются компилятором), но является ли это хорошей практикой или вы всегда должны создавать соответствующие iVars в своих классах?
Извините меня за очень длинное сообщение, я просто надеюсь, что я не написал слишком очевидный вопрос, потому что здесь, в Италии, поздно ночью, и я очень устал... но когда эти вопросы придут мне в голову, t ждать решения:)