目标C基本问题

时间:2010-08-20 06:05:10

标签: objective-c uiviewcontroller uiapplicationdelegate uiapplication

我使用基于视图的模板制作了一个简单的应用程序。我在viewController文件中只将nslog放在view didload方法中,并在applicationDidFinishLaunch方法(在appDelegate中)中检查哪个类文件首先被调用。

在我得到的运行之后:viewController首先运行然后appdelegate ..但我认为appdelegate首先应该根据需要调用其他的... plz给我正确的解释。

注意到 - 我没有在appDelegate中调用viewController(没有创建对象)(在应用程序内部执行didFinishLaunch)。我正在使用ios4

2 个答案:

答案 0 :(得分:2)

如果您的View Controller是AppDelegate的属性,则类似于代码引用

@interface AppDelegate_Shared : NSObject <UIApplicationDelegate, UIAlertViewDelegate, OMFDataLoadDelegate> {

    NSManagedObjectModel *managedObjectModel;
    NSManagedObjectContext *managedObjectContext;       
    NSPersistentStoreCoordinator *persistentStoreCoordinator;

    UIWindow *window;

    UITabBarController *tabBarController;

}

然后它可能在AppDelegate被分配时被分配。根据Apple文档viewDidLoad在视图加载到内存后运行,这可能有点令人困惑,因为语言可以让你相信它被加载到屏幕上。

http://developer.apple.com/iphone/library/documentation/uikit/reference/UIViewController_Class/Reference/Reference.html#//apple_ref/doc/uid/TP40006926-CH3-SW25

将您的NSLog语句移动到viewDidAppear以获得您期望的结果。这里有两个示例代码段,其中包含您希望加载语句的方式。

ViewController.m

- (void) viewDidLoad {
  NSLog(@"1st - this occurs when appDelegate allocates this object");
}
- (void) viewDidAppear {

  NSLog(@"3rd - this should appear after the applicationDidFinishLaunchingStatement");
}

AppDelegate_Shared.m

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {    
    NSLog(@"2. Starting AppDelegate_Shared");

    [window addSubview:self.tabBarController.view];
    [window makeKeyAndVisible];

    NSLog(@"4. Leaving AppDelegate_Shared");
    return YES;
}

答案 1 :(得分:0)

如果初始视图未加载,那么应用程序尚未完成启动。

消息以正确的顺序发送。