Gia*_*nzi 15 xcode objective-c uiapplicationdelegate ios
我有一个关于IOS应用程序的新手问题...如果我创建一个名为TestForStackOverflow的新的基于视图的应用程序,Xcode会自动为TestForStackOverflowAppDelegate.h创建这样的代码:
@class TestForStackOverflowViewController;
@interface TestForStackOverflowAppDelegate : NSObject <UIApplicationDelegate>
@property (nonatomic, retain) IBOutlet UIWindow *window;
@property (nonatomic, retain) IBOutlet TestForStackOverflowViewController *viewController;
@end
Run Code Online (Sandbox Code Playgroud)
以及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;
}
[...]
Run Code Online (Sandbox Code Playgroud)
这是我的问题:
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;
}
Run Code Online (Sandbox Code Playgroud)
它不应该在UIApplicationMain函数调用的第四个参数中设置应用程序委托类吗?
2)设置TestForStackOverflowAppDelegate类的窗口和viewController属性在哪里?
3)这可能是微不足道的,但为什么我们合成了window = _window,而没有在TestForStackOverflowAppDelegate接口中有一个名为_window的实例变量?我已经看到你可以在类接口中没有相应的iVar声明@properties(也许它们是由编译器自动创建的),但这是一个好习惯还是你总是应该在你的类中创建相应的iVars?
请原谅我很长的信息,我只是希望我没有写过一个太明显的问题,因为在意大利这里是深夜,我很累......但是当这些问题进入我的脑海时,我等不及了解决方案 :)
bry*_*mac 13
如何加载app委托类?
在您的-info.plist文件中有一个名为"主nib文件基本名称"的键,其视图类似于MainWindow.xib.在该xib文件中,有一个文件的所有者代理对象,并且它具有设置为app delegate类的委托.
在设计器中打开XIB.注意顶部的File's Owner对象,上下文单击它并查看委托对象.现在看一下(XCode 4)行下面的设计中的对象 - 你应该在那里看到app delegate对象.
appDelegate设置的窗口和viewController在哪里?
查看设计器和上下文,单击(XCode 4)行下方的app delegate对象.window和viewController目标绑在那里.
_window iVar
它会自动为您提供.我不清楚它是继承还是由编译器生成.
这里有关于_ iVars的更多内容: 为什么在iOS中使用前导下划线重命名合成属性?
如果您选择在代码中执行等效操作:
删除plist xib引用main.m:传递委托名称
int main(int argc, char *argv[])
{
int retVal = UIApplicationMain(argc, argv, nil, @"HelloViewAppDelegate");
Run Code Online (Sandbox Code Playgroud)
在app委托中:
- (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;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11637 次 |
| 最近记录: |