gpt4 book ai didi

objective-c - 你的 Application Delegate 设置在哪里,谁初始化它的 window 和 viewController 属性?

转载 作者:技术小花猫 更新时间:2023-10-29 10:16:23 28 4
gpt4 key购买 nike

我有一个关于 IOS 应用程序的新手问题...如果我创建一个名为 TestForStackOverflow 的新的基于 View 的应用程序,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 类在哪里设置为当前应用程序的委托(delegate)?它是“自动”完成的吗?我看到 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函数调用的第四个参数中设置应用委托(delegate)类吗?

2) TestForStackOverflowAppDelegate 类的 window 和 viewController 属性在哪里设置?

3) 这可能是微不足道的,但为什么我们要合成 window = _window,而 TestForStackOverflowAppDelegate 接口(interface)中没有名为 _window 的实例变量?我已经看到您可以在类接口(interface)中没有相应的 iVar 的情况下声明 @properties(也许它们是由编译器自动创建的),但这是一个好的做法还是您应该始终在您的类中创建相应的 iVar?

对不起,很长的消息,我只是希望我没有写一个太明显的问题,因为在意大利这里是深夜而且我很累..但是当这些问题进入我的脑海时,我可以'不要等待解决方案:)

最佳答案

应用委托(delegate)类是如何加载的?

在您的 -info.plist 文件中有一个名为“Main nib file base name”的键,并且有一个类似于 MainWindow.xib 的 View 。在那个 xib 文件中,有一个文件的所有者代理对象,它有一个委托(delegate)设置为应用委托(delegate)类。

在设计器中打开该 XIB。注意顶部的 File's Owner 对象,上下文单击它并查看委托(delegate)对象。现在查看设计中 (XCode 4) 行下方的对象 - 您应该在那里看到应用程序委托(delegate)对象。

appDelegate 设置的 window 和 viewController 在哪里?

在设计器和上下文中查看 (XCode 4) 行下方的应用委托(delegate)对象。窗口和 viewController 目标绑定(bind)在那里。

_window iVar

它是自动为您提供的。我不清楚它是继承的还是由编译器生成的。

这里是关于 _ iVars 的更多信息: Why rename synthesized properties in iOS with leading underscores?

如果您选择在代码中执行等效操作:

删除 plist xib 引用main.m: 委托(delegate)的传递名称

int main(int argc, char *argv[])
{
int retVal = UIApplicationMain(argc, argv, nil, @"HelloViewAppDelegate");

在应用委托(delegate)中:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
// Override point for customization after application launch.
CGRect screenBounds = [[UIScreen mainScreen] applicationFrame];
CGRect windowBounds = screenBounds;
windowBounds.origin.y = 0.0;

// init window
[self setWindow: [[UIWindow alloc] initWithFrame:screenBounds]];

// init view controller
_mainViewController = [[MainViewController alloc] init];

[[self window] addSubview:[_mainViewController view]];

[self.window makeKeyAndVisible];
return YES;
}

关于objective-c - 你的 Application Delegate 设置在哪里,谁初始化它的 window 和 viewController 属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7535605/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com